@nlabs/metropolisjs 0.3.4 → 0.3.6

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 (122) hide show
  1. package/.github/copilot-instructions.md +55 -167
  2. package/AGENTS.md +52 -10
  3. package/README.md +52 -2
  4. package/docs/ACTIONS.md +84 -22
  5. package/docs/assets/metropolisjs-logo.png +0 -0
  6. package/examples/factory-pattern-usage.ts +15 -10
  7. package/lex.config.mjs +5 -8
  8. package/lib/actions/appActions/appActions.d.ts.map +1 -1
  9. package/lib/actions/appActions/appActions.js +77 -6
  10. package/lib/actions/awsRumActions/awsRumActions.d.ts +34 -0
  11. package/lib/actions/awsRumActions/awsRumActions.d.ts.map +1 -0
  12. package/lib/actions/awsRumActions/awsRumActions.js +183 -0
  13. package/lib/actions/crmActions/crmActions.d.ts +87 -0
  14. package/lib/actions/crmActions/crmActions.d.ts.map +1 -0
  15. package/lib/actions/crmActions/crmActions.js +338 -0
  16. package/lib/actions/index.d.ts +3 -0
  17. package/lib/actions/index.d.ts.map +1 -1
  18. package/lib/actions/index.js +4 -1
  19. package/lib/actions/restActions/restActions.d.ts +19 -0
  20. package/lib/actions/restActions/restActions.d.ts.map +1 -0
  21. package/lib/actions/restActions/restActions.js +40 -0
  22. package/lib/actions/userActions/userActions.d.ts +12 -0
  23. package/lib/actions/userActions/userActions.d.ts.map +1 -1
  24. package/lib/actions/userActions/userActions.js +20 -4
  25. package/lib/adapters/appAdapter/appAdapter.d.ts +2 -2
  26. package/lib/adapters/appAdapter/appAdapter.d.ts.map +1 -1
  27. package/lib/adapters/arangoAdapter/arangoAdapter.d.ts +2 -2
  28. package/lib/adapters/arangoAdapter/arangoAdapter.d.ts.map +1 -1
  29. package/lib/adapters/contentAdapter/contentAdapter.d.ts +2 -2
  30. package/lib/adapters/contentAdapter/contentAdapter.d.ts.map +1 -1
  31. package/lib/adapters/conversationAdapter/conversationAdapter.d.ts +2 -2
  32. package/lib/adapters/conversationAdapter/conversationAdapter.d.ts.map +1 -1
  33. package/lib/adapters/eventAdapter/eventAdapter.d.ts +2 -2
  34. package/lib/adapters/eventAdapter/eventAdapter.d.ts.map +1 -1
  35. package/lib/adapters/fileAdapter/fileAdapter.d.ts +2 -2
  36. package/lib/adapters/fileAdapter/fileAdapter.d.ts.map +1 -1
  37. package/lib/adapters/groupAdapter/groupAdapter.d.ts +2 -2
  38. package/lib/adapters/groupAdapter/groupAdapter.d.ts.map +1 -1
  39. package/lib/adapters/imageAdapter/imageAdapter.d.ts +2 -2
  40. package/lib/adapters/imageAdapter/imageAdapter.d.ts.map +1 -1
  41. package/lib/adapters/locationAdapter/locationAdapter.d.ts +2 -2
  42. package/lib/adapters/locationAdapter/locationAdapter.d.ts.map +1 -1
  43. package/lib/adapters/messageAdapter/messageAdapter.d.ts +2 -2
  44. package/lib/adapters/messageAdapter/messageAdapter.d.ts.map +1 -1
  45. package/lib/adapters/permissionAdapter/permissionAdapter.d.ts +2 -2
  46. package/lib/adapters/permissionAdapter/permissionAdapter.d.ts.map +1 -1
  47. package/lib/adapters/personaAdapter/personaAdapter.d.ts +2 -2
  48. package/lib/adapters/personaAdapter/personaAdapter.d.ts.map +1 -1
  49. package/lib/adapters/postAdapter/postAdapter.d.ts +2 -2
  50. package/lib/adapters/postAdapter/postAdapter.d.ts.map +1 -1
  51. package/lib/adapters/reactionAdapter/reactionAdapter.d.ts +2 -2
  52. package/lib/adapters/reactionAdapter/reactionAdapter.d.ts.map +1 -1
  53. package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts +2 -2
  54. package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts.map +1 -1
  55. package/lib/adapters/sessionAdapter/sessionAdapter.d.ts +2 -2
  56. package/lib/adapters/sessionAdapter/sessionAdapter.d.ts.map +1 -1
  57. package/lib/adapters/tagAdapter/tagAdapter.d.ts +2 -2
  58. package/lib/adapters/tagAdapter/tagAdapter.d.ts.map +1 -1
  59. package/lib/adapters/translationAdapter/translationAdapter.d.ts +2 -2
  60. package/lib/adapters/translationAdapter/translationAdapter.d.ts.map +1 -1
  61. package/lib/adapters/userAdapter/userAdapter.d.ts +2 -2
  62. package/lib/adapters/userAdapter/userAdapter.d.ts.map +1 -1
  63. package/lib/adapters/videoAdapter/videoAdapter.d.ts +2 -2
  64. package/lib/adapters/videoAdapter/videoAdapter.d.ts.map +1 -1
  65. package/lib/config/index.d.ts +9 -0
  66. package/lib/config/index.d.ts.map +1 -1
  67. package/lib/config/index.js +1 -1
  68. package/lib/constants/Collections.d.ts +16 -0
  69. package/lib/constants/Collections.d.ts.map +1 -1
  70. package/lib/constants/Collections.js +17 -1
  71. package/lib/index.d.ts +6 -3
  72. package/lib/index.d.ts.map +1 -1
  73. package/lib/index.js +6 -3
  74. package/lib/stores/appStore.d.ts +10 -0
  75. package/lib/stores/appStore.d.ts.map +1 -1
  76. package/lib/stores/appStore.js +12 -2
  77. package/lib/tests/actionTestScenarios.d.ts +20 -0
  78. package/lib/tests/actionTestScenarios.d.ts.map +1 -0
  79. package/lib/tests/actionTestScenarios.js +851 -0
  80. package/lib/tests/testGraphQLServer.d.ts.map +1 -0
  81. package/lib/tests/testGraphQLServer.js +197 -0
  82. package/lib/tests/testGraphQLServerSimple.d.ts.map +1 -0
  83. package/lib/tests/testGraphQLServerSimple.js +52 -0
  84. package/lib/types/crm.types.d.ts +100 -0
  85. package/lib/types/crm.types.d.ts.map +1 -0
  86. package/lib/types/crm.types.js +6 -0
  87. package/lib/types/index.d.ts +1 -0
  88. package/lib/types/index.d.ts.map +1 -1
  89. package/lib/types/index.js +2 -1
  90. package/lib/utils/MetropolisProvider.d.ts +1 -1
  91. package/lib/utils/MetropolisProvider.d.ts.map +1 -1
  92. package/lib/utils/actionFactory.d.ts +7 -4
  93. package/lib/utils/actionFactory.d.ts.map +1 -1
  94. package/lib/utils/actionFactory.js +13 -1
  95. package/lib/utils/api.d.ts +15 -2
  96. package/lib/utils/api.d.ts.map +1 -1
  97. package/lib/utils/api.js +120 -32
  98. package/lib/utils/baseActionFactory.d.ts +2 -2
  99. package/lib/utils/dateUtils.d.ts +1 -1
  100. package/lib/utils/dateUtils.d.ts.map +1 -1
  101. package/lib/utils/index.d.ts +2 -2
  102. package/lib/utils/index.d.ts.map +1 -1
  103. package/lib/utils/index.js +3 -3
  104. package/lib/utils/location.d.ts +1 -1
  105. package/lib/utils/location.d.ts.map +1 -1
  106. package/lib/utils/requestCache.d.ts +1 -1
  107. package/lib/utils/requestCache.d.ts.map +1 -1
  108. package/lib/utils/useMetropolis.d.ts +3 -0
  109. package/lib/utils/useMetropolis.d.ts.map +1 -1
  110. package/lib/utils/useMetropolis.js +39 -6
  111. package/lib/utils/validatorFactory.d.ts +1 -1
  112. package/lib/utils/validatorFactory.d.ts.map +1 -1
  113. package/package.json +12 -12
  114. package/tsconfig.lint.json +2 -2
  115. package/tsconfig.test.json +3 -2
  116. package/jest.config.mjs +0 -28
  117. package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts.map +0 -1
  118. package/lib/__tests__/e2e/helpers/testGraphQLServer.js +0 -197
  119. package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts.map +0 -1
  120. package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.js +0 -52
  121. /package/lib/{__tests__/e2e/helpers → tests}/testGraphQLServer.d.ts +0 -0
  122. /package/lib/{__tests__/e2e/helpers → tests}/testGraphQLServerSimple.d.ts +0 -0
@@ -2,6 +2,8 @@
2
2
  * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
3
  * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
4
  */ import { createContentActions } from '../actions/contentActions/contentActions.js';
5
+ import { createAwsRumActions } from '../actions/awsRumActions/awsRumActions.js';
6
+ import { createCrmActions } from '../actions/crmActions/crmActions.js';
5
7
  import { createEventActions } from '../actions/eventActions/eventActions.js';
6
8
  import { createGroupActions } from '../actions/groupActions/groupActions.js';
7
9
  import { createImageActions } from '../actions/imageActions/imageActions.js';
@@ -11,6 +13,7 @@ import { createPermissionActions } from '../actions/permissionActions/permission
11
13
  import { createPostActions } from '../actions/postActions/postActions.js';
12
14
  import { createPersonaActions } from '../actions/personaActions/personaActions.js';
13
15
  import { createReactionActions } from '../actions/reactionActions/reactionActions.js';
16
+ import { createRestActions } from '../actions/restActions/restActions.js';
14
17
  import { createSSEActions } from '../actions/sseActions/sseActions.js';
15
18
  import { createSubscriptionActions } from '../actions/subscriptionActions/subscriptionActions.js';
16
19
  import { createTagActions } from '../actions/tagActions/tagActions.js';
@@ -21,8 +24,12 @@ import { createWebsocketActions } from '../actions/websocketActions/websocketAct
21
24
  const websocketActionCache = new WeakMap();
22
25
  export const createAction = (actionType, flux, options)=>{
23
26
  switch(actionType){
27
+ case 'awsRum':
28
+ return createAwsRumActions(flux, options);
24
29
  case 'content':
25
30
  return createContentActions(flux, options);
31
+ case 'crm':
32
+ return createCrmActions(flux, options);
26
33
  case 'event':
27
34
  return createEventActions(flux, options);
28
35
  case 'group':
@@ -41,6 +48,8 @@ export const createAction = (actionType, flux, options)=>{
41
48
  return createPersonaActions(flux, options);
42
49
  case 'reaction':
43
50
  return createReactionActions(flux, options);
51
+ case 'rest':
52
+ return createRestActions(flux, options);
44
53
  case 'sse':
45
54
  return createSSEActions(flux, options);
46
55
  case 'subscription':
@@ -71,7 +80,9 @@ export const createActions = (actionTypes, flux, options)=>{
71
80
  };
72
81
  export const createAllActions = (flux, options)=>{
73
82
  const allActionTypes = [
83
+ 'awsRum',
74
84
  'content',
85
+ 'crm',
75
86
  'event',
76
87
  'group',
77
88
  'image',
@@ -81,6 +92,7 @@ export const createAllActions = (flux, options)=>{
81
92
  'post',
82
93
  'persona',
83
94
  'reaction',
95
+ 'rest',
84
96
  'sse',
85
97
  'subscription',
86
98
  'tag',
@@ -92,4 +104,4 @@ export const createAllActions = (flux, options)=>{
92
104
  return createActions(allActionTypes, flux, options);
93
105
  };
94
106
 
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvYWN0aW9uRmFjdG9yeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVDb250ZW50QWN0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9jb250ZW50QWN0aW9ucy9jb250ZW50QWN0aW9ucy5qcyc7XG5pbXBvcnQge2NyZWF0ZUV2ZW50QWN0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9ldmVudEFjdGlvbnMvZXZlbnRBY3Rpb25zLmpzJztcbmltcG9ydCB7Y3JlYXRlR3JvdXBBY3Rpb25zfSBmcm9tICcuLi9hY3Rpb25zL2dyb3VwQWN0aW9ucy9ncm91cEFjdGlvbnMuanMnO1xuaW1wb3J0IHtjcmVhdGVJbWFnZUFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvaW1hZ2VBY3Rpb25zL2ltYWdlQWN0aW9ucy5qcyc7XG5pbXBvcnQge2NyZWF0ZUxvY2F0aW9uQWN0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9sb2NhdGlvbkFjdGlvbnMvbG9jYXRpb25BY3Rpb25zLmpzJztcbmltcG9ydCB7Y3JlYXRlTWVzc2FnZUFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvbWVzc2FnZUFjdGlvbnMvbWVzc2FnZUFjdGlvbnMuanMnO1xuaW1wb3J0IHtjcmVhdGVQZXJtaXNzaW9uQWN0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9wZXJtaXNzaW9uQWN0aW9ucy9wZXJtaXNzaW9uQWN0aW9ucy5qcyc7XG5pbXBvcnQge2NyZWF0ZVBvc3RBY3Rpb25zfSBmcm9tICcuLi9hY3Rpb25zL3Bvc3RBY3Rpb25zL3Bvc3RBY3Rpb25zLmpzJztcbmltcG9ydCB7Y3JlYXRlUGVyc29uYUFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvcGVyc29uYUFjdGlvbnMvcGVyc29uYUFjdGlvbnMuanMnO1xuaW1wb3J0IHtjcmVhdGVSZWFjdGlvbkFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvcmVhY3Rpb25BY3Rpb25zL3JlYWN0aW9uQWN0aW9ucy5qcyc7XG5pbXBvcnQge2NyZWF0ZVNTRUFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvc3NlQWN0aW9ucy9zc2VBY3Rpb25zLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Vic2NyaXB0aW9uQWN0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9zdWJzY3JpcHRpb25BY3Rpb25zL3N1YnNjcmlwdGlvbkFjdGlvbnMuanMnO1xuaW1wb3J0IHtjcmVhdGVUYWdBY3Rpb25zfSBmcm9tICcuLi9hY3Rpb25zL3RhZ0FjdGlvbnMvdGFnQWN0aW9ucy5qcyc7XG5pbXBvcnQge2NyZWF0ZVRyYW5zbGF0aW9uQWN0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy90cmFuc2xhdGlvbkFjdGlvbnMvdHJhbnNsYXRpb25BY3Rpb25zLmpzJztcbmltcG9ydCB7Y3JlYXRlVXNlckFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvdXNlckFjdGlvbnMvdXNlckFjdGlvbnMuanMnO1xuaW1wb3J0IHtjcmVhdGVWaWRlb0FjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvdmlkZW9BY3Rpb25zL3ZpZGVvQWN0aW9ucy5qcyc7XG5pbXBvcnQge2NyZWF0ZVdlYnNvY2tldEFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvd2Vic29ja2V0QWN0aW9ucy93ZWJzb2NrZXRBY3Rpb25zLmpzJztcblxuaW1wb3J0IHR5cGUge0ZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5pbXBvcnQgdHlwZSB7Q29udGVudEFjdGlvbnNPcHRpb25zfSBmcm9tICcuLi9hY3Rpb25zL2NvbnRlbnRBY3Rpb25zL2NvbnRlbnRBY3Rpb25zLmpzJztcbmltcG9ydCB0eXBlIHtFdmVudEFjdGlvbnNPcHRpb25zfSBmcm9tICcuLi9hY3Rpb25zL2V2ZW50QWN0aW9ucy9ldmVudEFjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge0dyb3VwQWN0aW9uc09wdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvZ3JvdXBBY3Rpb25zL2dyb3VwQWN0aW9ucy5qcyc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VBY3Rpb25zT3B0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9pbWFnZUFjdGlvbnMvaW1hZ2VBY3Rpb25zLmpzJztcbmltcG9ydCB0eXBlIHtMb2NhdGlvbkFjdGlvbnNPcHRpb25zfSBmcm9tICcuLi9hY3Rpb25zL2xvY2F0aW9uQWN0aW9ucy9sb2NhdGlvbkFjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge01lc3NhZ2VBY3Rpb25zT3B0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9tZXNzYWdlQWN0aW9ucy9tZXNzYWdlQWN0aW9ucy5qcyc7XG5pbXBvcnQgdHlwZSB7UGVybWlzc2lvbkFjdGlvbnNPcHRpb25zfSBmcm9tICcuLi9hY3Rpb25zL3Blcm1pc3Npb25BY3Rpb25zL3Blcm1pc3Npb25BY3Rpb25zLmpzJztcbmltcG9ydCB0eXBlIHtQb3N0QWN0aW9uc09wdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvcG9zdEFjdGlvbnMvcG9zdEFjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge1BlcnNvbmFBY3Rpb25zT3B0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9wZXJzb25hQWN0aW9ucy9wZXJzb25hQWN0aW9ucy5qcyc7XG5pbXBvcnQgdHlwZSB7UmVhY3Rpb25BY3Rpb25zT3B0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9yZWFjdGlvbkFjdGlvbnMvcmVhY3Rpb25BY3Rpb25zLmpzJztcbmltcG9ydCB0eXBlIHtTU0VBY3Rpb25zT3B0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9zc2VBY3Rpb25zL3NzZUFjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge1RhZ0FjdGlvbnNPcHRpb25zfSBmcm9tICcuLi9hY3Rpb25zL3RhZ0FjdGlvbnMvdGFnQWN0aW9ucy5qcyc7XG5pbXBvcnQgdHlwZSB7VHJhbnNsYXRpb25BY3Rpb25zT3B0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy90cmFuc2xhdGlvbkFjdGlvbnMvdHJhbnNsYXRpb25BY3Rpb25zLmpzJztcbmltcG9ydCB0eXBlIHtVc2VyQWN0aW9uc09wdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvdXNlckFjdGlvbnMvdXNlckFjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge1ZpZGVvQWN0aW9uc09wdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvdmlkZW9BY3Rpb25zL3ZpZGVvQWN0aW9ucy5qcyc7XG5cbmNvbnN0IHdlYnNvY2tldEFjdGlvbkNhY2hlID0gbmV3IFdlYWtNYXA8Rmx1eEZyYW1ld29yaywgUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlV2Vic29ja2V0QWN0aW9ucz4+KCk7XG5cbmV4cG9ydCB0eXBlIEFjdGlvblR5cGUgPVxuICB8ICdjb250ZW50J1xuICB8ICdldmVudCdcbiAgfCAnZ3JvdXAnXG4gIHwgJ2ltYWdlJ1xuICB8ICdsb2NhdGlvbidcbiAgfCAnbWVzc2FnZSdcbiAgfCAncGVybWlzc2lvbidcbiAgfCAncG9zdCdcbiAgfCAncGVyc29uYSdcbiAgfCAncmVhY3Rpb24nXG4gIHwgJ3NzZSdcbiAgfCAnc3Vic2NyaXB0aW9uJ1xuICB8ICd0YWcnXG4gIHwgJ3RyYW5zbGF0aW9uJ1xuICB8ICd1c2VyJ1xuICB8ICd2aWRlbydcbiAgfCAnd2Vic29ja2V0JztcblxuZXhwb3J0IHR5cGUgQWN0aW9uT3B0aW9ucyA9XG4gIHwgQ29udGVudEFjdGlvbnNPcHRpb25zXG4gIHwgRXZlbnRBY3Rpb25zT3B0aW9uc1xuICB8IEdyb3VwQWN0aW9uc09wdGlvbnNcbiAgfCBJbWFnZUFjdGlvbnNPcHRpb25zXG4gIHwgTG9jYXRpb25BY3Rpb25zT3B0aW9uc1xuICB8IE1lc3NhZ2VBY3Rpb25zT3B0aW9uc1xuICB8IFBlcm1pc3Npb25BY3Rpb25zT3B0aW9uc1xuICB8IFBvc3RBY3Rpb25zT3B0aW9uc1xuICB8IFBlcnNvbmFBY3Rpb25zT3B0aW9uc1xuICB8IFJlYWN0aW9uQWN0aW9uc09wdGlvbnNcbiAgfCBTU0VBY3Rpb25zT3B0aW9uc1xuICB8IFRhZ0FjdGlvbnNPcHRpb25zXG4gIHwgVHJhbnNsYXRpb25BY3Rpb25zT3B0aW9uc1xuICB8IFVzZXJBY3Rpb25zT3B0aW9uc1xuICB8IFZpZGVvQWN0aW9uc09wdGlvbnNcbiAgfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVBY3Rpb24gPSA8VCBleHRlbmRzIEFjdGlvblR5cGU+KFxuICBhY3Rpb25UeXBlOiBULFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBvcHRpb25zPzogQWN0aW9uT3B0aW9uc1xuKSA9PiB7XG4gIHN3aXRjaChhY3Rpb25UeXBlKSB7XG4gICAgY2FzZSAnY29udGVudCc6XG4gICAgICByZXR1cm4gY3JlYXRlQ29udGVudEFjdGlvbnMoZmx1eCwgb3B0aW9ucyBhcyBDb250ZW50QWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAnZXZlbnQnOlxuICAgICAgcmV0dXJuIGNyZWF0ZUV2ZW50QWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIEV2ZW50QWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgcmV0dXJuIGNyZWF0ZUdyb3VwQWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIEdyb3VwQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgcmV0dXJuIGNyZWF0ZUltYWdlQWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIEltYWdlQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAnbG9jYXRpb24nOlxuICAgICAgcmV0dXJuIGNyZWF0ZUxvY2F0aW9uQWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIExvY2F0aW9uQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAnbWVzc2FnZSc6XG4gICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUFjdGlvbnMoZmx1eCwgb3B0aW9ucyBhcyBNZXNzYWdlQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAncGVybWlzc2lvbic6XG4gICAgICByZXR1cm4gY3JlYXRlUGVybWlzc2lvbkFjdGlvbnMoZmx1eCwgb3B0aW9ucyBhcyBQZXJtaXNzaW9uQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAncG9zdCc6XG4gICAgICByZXR1cm4gY3JlYXRlUG9zdEFjdGlvbnMoZmx1eCwgb3B0aW9ucyBhcyBQb3N0QWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAncGVyc29uYSc6XG4gICAgICByZXR1cm4gY3JlYXRlUGVyc29uYUFjdGlvbnMoZmx1eCwgb3B0aW9ucyBhcyBQZXJzb25hQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAncmVhY3Rpb24nOlxuICAgICAgcmV0dXJuIGNyZWF0ZVJlYWN0aW9uQWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIFJlYWN0aW9uQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAnc3NlJzpcbiAgICAgIHJldHVybiBjcmVhdGVTU0VBY3Rpb25zKGZsdXgsIG9wdGlvbnMgYXMgU1NFQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAnc3Vic2NyaXB0aW9uJzpcbiAgICAgIHJldHVybiBjcmVhdGVTdWJzY3JpcHRpb25BY3Rpb25zKGZsdXgpO1xuXG4gICAgY2FzZSAndGFnJzpcbiAgICAgIHJldHVybiBjcmVhdGVUYWdBY3Rpb25zKGZsdXgsIG9wdGlvbnMgYXMgVGFnQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAndHJhbnNsYXRpb24nOlxuICAgICAgcmV0dXJuIGNyZWF0ZVRyYW5zbGF0aW9uQWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIFRyYW5zbGF0aW9uQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAndXNlcic6XG4gICAgICByZXR1cm4gY3JlYXRlVXNlckFjdGlvbnMoZmx1eCwgb3B0aW9ucyBhcyBVc2VyQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAndmlkZW8nOlxuICAgICAgcmV0dXJuIGNyZWF0ZVZpZGVvQWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIFZpZGVvQWN0aW9uc09wdGlvbnMpO1xuXG4gICAgY2FzZSAnd2Vic29ja2V0JzpcbiAgICAgIGlmKCF3ZWJzb2NrZXRBY3Rpb25DYWNoZS5oYXMoZmx1eCkpIHtcbiAgICAgICAgd2Vic29ja2V0QWN0aW9uQ2FjaGUuc2V0KGZsdXgsIGNyZWF0ZVdlYnNvY2tldEFjdGlvbnMoZmx1eCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gd2Vic29ja2V0QWN0aW9uQ2FjaGUuZ2V0KGZsdXgpIGFzIFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZVdlYnNvY2tldEFjdGlvbnM+O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhY3Rpb24gdHlwZTogJHthY3Rpb25UeXBlfWApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQWN0aW9ucyA9IChcbiAgYWN0aW9uVHlwZXM6IEFjdGlvblR5cGVbXSxcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgb3B0aW9ucz86IFBhcnRpYWw8UmVjb3JkPEFjdGlvblR5cGUsIEFjdGlvbk9wdGlvbnM+PlxuKTogUGFydGlhbDxSZWNvcmQ8QWN0aW9uVHlwZSwgQWN0aW9uUmV0dXJuVHlwZTxBY3Rpb25UeXBlPj4+ID0+IHtcbiAgY29uc3QgYWN0aW9uczogUGFydGlhbDxSZWNvcmQ8QWN0aW9uVHlwZSwgQWN0aW9uUmV0dXJuVHlwZTxBY3Rpb25UeXBlPj4+ID0ge307XG5cbiAgYWN0aW9uVHlwZXMuZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgIGFjdGlvbnNbdHlwZV0gPSBjcmVhdGVBY3Rpb24odHlwZSwgZmx1eCwgb3B0aW9ucz8uW3R5cGVdKSBhcyBBY3Rpb25SZXR1cm5UeXBlPEFjdGlvblR5cGU+O1xuICB9KTtcblxuICByZXR1cm4gYWN0aW9ucztcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVBbGxBY3Rpb25zID0gKFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBvcHRpb25zPzogUGFydGlhbDxSZWNvcmQ8QWN0aW9uVHlwZSwgQWN0aW9uT3B0aW9ucz4+XG4pID0+IHtcbiAgY29uc3QgYWxsQWN0aW9uVHlwZXM6IEFjdGlvblR5cGVbXSA9IFtcbiAgICAnY29udGVudCcsXG4gICAgJ2V2ZW50JyxcbiAgICAnZ3JvdXAnLFxuICAgICdpbWFnZScsXG4gICAgJ2xvY2F0aW9uJyxcbiAgICAnbWVzc2FnZScsXG4gICAgJ3Blcm1pc3Npb24nLFxuICAgICdwb3N0JyxcbiAgICAncGVyc29uYScsXG4gICAgJ3JlYWN0aW9uJyxcbiAgICAnc3NlJyxcbiAgICAnc3Vic2NyaXB0aW9uJyxcbiAgICAndGFnJyxcbiAgICAndHJhbnNsYXRpb24nLFxuICAgICd1c2VyJyxcbiAgICAndmlkZW8nLFxuICAgICd3ZWJzb2NrZXQnXG4gIF07XG5cbiAgcmV0dXJuIGNyZWF0ZUFjdGlvbnMoYWxsQWN0aW9uVHlwZXMsIGZsdXgsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IHR5cGUgQWN0aW9uVHlwZXMgPSBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBbGxBY3Rpb25zPjtcbmV4cG9ydCB0eXBlIEFjdGlvblJldHVyblR5cGU8VCBleHRlbmRzIEFjdGlvblR5cGU+ID0gUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlQWN0aW9uPFQ+PjtcbiJdLCJuYW1lcyI6WyJjcmVhdGVDb250ZW50QWN0aW9ucyIsImNyZWF0ZUV2ZW50QWN0aW9ucyIsImNyZWF0ZUdyb3VwQWN0aW9ucyIsImNyZWF0ZUltYWdlQWN0aW9ucyIsImNyZWF0ZUxvY2F0aW9uQWN0aW9ucyIsImNyZWF0ZU1lc3NhZ2VBY3Rpb25zIiwiY3JlYXRlUGVybWlzc2lvbkFjdGlvbnMiLCJjcmVhdGVQb3N0QWN0aW9ucyIsImNyZWF0ZVBlcnNvbmFBY3Rpb25zIiwiY3JlYXRlUmVhY3Rpb25BY3Rpb25zIiwiY3JlYXRlU1NFQWN0aW9ucyIsImNyZWF0ZVN1YnNjcmlwdGlvbkFjdGlvbnMiLCJjcmVhdGVUYWdBY3Rpb25zIiwiY3JlYXRlVHJhbnNsYXRpb25BY3Rpb25zIiwiY3JlYXRlVXNlckFjdGlvbnMiLCJjcmVhdGVWaWRlb0FjdGlvbnMiLCJjcmVhdGVXZWJzb2NrZXRBY3Rpb25zIiwid2Vic29ja2V0QWN0aW9uQ2FjaGUiLCJXZWFrTWFwIiwiY3JlYXRlQWN0aW9uIiwiYWN0aW9uVHlwZSIsImZsdXgiLCJvcHRpb25zIiwiaGFzIiwic2V0IiwiZ2V0IiwiRXJyb3IiLCJjcmVhdGVBY3Rpb25zIiwiYWN0aW9uVHlwZXMiLCJhY3Rpb25zIiwiZm9yRWFjaCIsInR5cGUiLCJjcmVhdGVBbGxBY3Rpb25zIiwiYWxsQWN0aW9uVHlwZXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLG9CQUFvQixRQUFPLDhDQUE4QztBQUNqRixTQUFRQyxrQkFBa0IsUUFBTywwQ0FBMEM7QUFDM0UsU0FBUUMsa0JBQWtCLFFBQU8sMENBQTBDO0FBQzNFLFNBQVFDLGtCQUFrQixRQUFPLDBDQUEwQztBQUMzRSxTQUFRQyxxQkFBcUIsUUFBTyxnREFBZ0Q7QUFDcEYsU0FBUUMsb0JBQW9CLFFBQU8sOENBQThDO0FBQ2pGLFNBQVFDLHVCQUF1QixRQUFPLG9EQUFvRDtBQUMxRixTQUFRQyxpQkFBaUIsUUFBTyx3Q0FBd0M7QUFDeEUsU0FBUUMsb0JBQW9CLFFBQU8sOENBQThDO0FBQ2pGLFNBQVFDLHFCQUFxQixRQUFPLGdEQUFnRDtBQUNwRixTQUFRQyxnQkFBZ0IsUUFBTyxzQ0FBc0M7QUFDckUsU0FBUUMseUJBQXlCLFFBQU8sd0RBQXdEO0FBQ2hHLFNBQVFDLGdCQUFnQixRQUFPLHNDQUFzQztBQUNyRSxTQUFRQyx3QkFBd0IsUUFBTyxzREFBc0Q7QUFDN0YsU0FBUUMsaUJBQWlCLFFBQU8sd0NBQXdDO0FBQ3hFLFNBQVFDLGtCQUFrQixRQUFPLDBDQUEwQztBQUMzRSxTQUFRQyxzQkFBc0IsUUFBTyxrREFBa0Q7QUFtQnZGLE1BQU1DLHVCQUF1QixJQUFJQztBQXVDakMsT0FBTyxNQUFNQyxlQUFlLENBQzFCQyxZQUNBQyxNQUNBQztJQUVBLE9BQU9GO1FBQ0wsS0FBSztZQUNILE9BQU9wQixxQkFBcUJxQixNQUFNQztRQUVwQyxLQUFLO1lBQ0gsT0FBT3JCLG1CQUFtQm9CLE1BQU1DO1FBRWxDLEtBQUs7WUFDSCxPQUFPcEIsbUJBQW1CbUIsTUFBTUM7UUFFbEMsS0FBSztZQUNILE9BQU9uQixtQkFBbUJrQixNQUFNQztRQUVsQyxLQUFLO1lBQ0gsT0FBT2xCLHNCQUFzQmlCLE1BQU1DO1FBRXJDLEtBQUs7WUFDSCxPQUFPakIscUJBQXFCZ0IsTUFBTUM7UUFFcEMsS0FBSztZQUNILE9BQU9oQix3QkFBd0JlLE1BQU1DO1FBRXZDLEtBQUs7WUFDSCxPQUFPZixrQkFBa0JjLE1BQU1DO1FBRWpDLEtBQUs7WUFDSCxPQUFPZCxxQkFBcUJhLE1BQU1DO1FBRXBDLEtBQUs7WUFDSCxPQUFPYixzQkFBc0JZLE1BQU1DO1FBRXJDLEtBQUs7WUFDSCxPQUFPWixpQkFBaUJXLE1BQU1DO1FBRWhDLEtBQUs7WUFDSCxPQUFPWCwwQkFBMEJVO1FBRW5DLEtBQUs7WUFDSCxPQUFPVCxpQkFBaUJTLE1BQU1DO1FBRWhDLEtBQUs7WUFDSCxPQUFPVCx5QkFBeUJRLE1BQU1DO1FBRXhDLEtBQUs7WUFDSCxPQUFPUixrQkFBa0JPLE1BQU1DO1FBRWpDLEtBQUs7WUFDSCxPQUFPUCxtQkFBbUJNLE1BQU1DO1FBRWxDLEtBQUs7WUFDSCxJQUFHLENBQUNMLHFCQUFxQk0sR0FBRyxDQUFDRixPQUFPO2dCQUNsQ0oscUJBQXFCTyxHQUFHLENBQUNILE1BQU1MLHVCQUF1Qks7WUFDeEQ7WUFFQSxPQUFPSixxQkFBcUJRLEdBQUcsQ0FBQ0o7UUFFbEM7WUFDRSxNQUFNLElBQUlLLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRU4sWUFBWTtJQUN4RDtBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU1PLGdCQUFnQixDQUMzQkMsYUFDQVAsTUFDQUM7SUFFQSxNQUFNTyxVQUFxRSxDQUFDO0lBRTVFRCxZQUFZRSxPQUFPLENBQUMsQ0FBQ0M7UUFDbkJGLE9BQU8sQ0FBQ0UsS0FBSyxHQUFHWixhQUFhWSxNQUFNVixNQUFNQyxTQUFTLENBQUNTLEtBQUs7SUFDMUQ7SUFFQSxPQUFPRjtBQUNULEVBQUU7QUFFRixPQUFPLE1BQU1HLG1CQUFtQixDQUM5QlgsTUFDQUM7SUFFQSxNQUFNVyxpQkFBK0I7UUFDbkM7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtLQUNEO0lBRUQsT0FBT04sY0FBY00sZ0JBQWdCWixNQUFNQztBQUM3QyxFQUFFIn0=
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvYWN0aW9uRmFjdG9yeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVDb250ZW50QWN0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9jb250ZW50QWN0aW9ucy9jb250ZW50QWN0aW9ucy5qcyc7XG5pbXBvcnQge2NyZWF0ZUF3c1J1bUFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvYXdzUnVtQWN0aW9ucy9hd3NSdW1BY3Rpb25zLmpzJztcbmltcG9ydCB7Y3JlYXRlQ3JtQWN0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9jcm1BY3Rpb25zL2NybUFjdGlvbnMuanMnO1xuaW1wb3J0IHtjcmVhdGVFdmVudEFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvZXZlbnRBY3Rpb25zL2V2ZW50QWN0aW9ucy5qcyc7XG5pbXBvcnQge2NyZWF0ZUdyb3VwQWN0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9ncm91cEFjdGlvbnMvZ3JvdXBBY3Rpb25zLmpzJztcbmltcG9ydCB7Y3JlYXRlSW1hZ2VBY3Rpb25zfSBmcm9tICcuLi9hY3Rpb25zL2ltYWdlQWN0aW9ucy9pbWFnZUFjdGlvbnMuanMnO1xuaW1wb3J0IHtjcmVhdGVMb2NhdGlvbkFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvbG9jYXRpb25BY3Rpb25zL2xvY2F0aW9uQWN0aW9ucy5qcyc7XG5pbXBvcnQge2NyZWF0ZU1lc3NhZ2VBY3Rpb25zfSBmcm9tICcuLi9hY3Rpb25zL21lc3NhZ2VBY3Rpb25zL21lc3NhZ2VBY3Rpb25zLmpzJztcbmltcG9ydCB7Y3JlYXRlUGVybWlzc2lvbkFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvcGVybWlzc2lvbkFjdGlvbnMvcGVybWlzc2lvbkFjdGlvbnMuanMnO1xuaW1wb3J0IHtjcmVhdGVQb3N0QWN0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9wb3N0QWN0aW9ucy9wb3N0QWN0aW9ucy5qcyc7XG5pbXBvcnQge2NyZWF0ZVBlcnNvbmFBY3Rpb25zfSBmcm9tICcuLi9hY3Rpb25zL3BlcnNvbmFBY3Rpb25zL3BlcnNvbmFBY3Rpb25zLmpzJztcbmltcG9ydCB7Y3JlYXRlUmVhY3Rpb25BY3Rpb25zfSBmcm9tICcuLi9hY3Rpb25zL3JlYWN0aW9uQWN0aW9ucy9yZWFjdGlvbkFjdGlvbnMuanMnO1xuaW1wb3J0IHtjcmVhdGVSZXN0QWN0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9yZXN0QWN0aW9ucy9yZXN0QWN0aW9ucy5qcyc7XG5pbXBvcnQge2NyZWF0ZVNTRUFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvc3NlQWN0aW9ucy9zc2VBY3Rpb25zLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Vic2NyaXB0aW9uQWN0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9zdWJzY3JpcHRpb25BY3Rpb25zL3N1YnNjcmlwdGlvbkFjdGlvbnMuanMnO1xuaW1wb3J0IHtjcmVhdGVUYWdBY3Rpb25zfSBmcm9tICcuLi9hY3Rpb25zL3RhZ0FjdGlvbnMvdGFnQWN0aW9ucy5qcyc7XG5pbXBvcnQge2NyZWF0ZVRyYW5zbGF0aW9uQWN0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy90cmFuc2xhdGlvbkFjdGlvbnMvdHJhbnNsYXRpb25BY3Rpb25zLmpzJztcbmltcG9ydCB7Y3JlYXRlVXNlckFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvdXNlckFjdGlvbnMvdXNlckFjdGlvbnMuanMnO1xuaW1wb3J0IHtjcmVhdGVWaWRlb0FjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvdmlkZW9BY3Rpb25zL3ZpZGVvQWN0aW9ucy5qcyc7XG5pbXBvcnQge2NyZWF0ZVdlYnNvY2tldEFjdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvd2Vic29ja2V0QWN0aW9ucy93ZWJzb2NrZXRBY3Rpb25zLmpzJztcblxuaW1wb3J0IHR5cGUge0ZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5pbXBvcnQgdHlwZSB7Q29udGVudEFjdGlvbnNPcHRpb25zfSBmcm9tICcuLi9hY3Rpb25zL2NvbnRlbnRBY3Rpb25zL2NvbnRlbnRBY3Rpb25zLmpzJztcbmltcG9ydCB0eXBlIHtBd3NSdW1BY3Rpb25zT3B0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9hd3NSdW1BY3Rpb25zL2F3c1J1bUFjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge0NybUFjdGlvbnNPcHRpb25zfSBmcm9tICcuLi9hY3Rpb25zL2NybUFjdGlvbnMvY3JtQWN0aW9ucy5qcyc7XG5pbXBvcnQgdHlwZSB7RXZlbnRBY3Rpb25zT3B0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9ldmVudEFjdGlvbnMvZXZlbnRBY3Rpb25zLmpzJztcbmltcG9ydCB0eXBlIHtHcm91cEFjdGlvbnNPcHRpb25zfSBmcm9tICcuLi9hY3Rpb25zL2dyb3VwQWN0aW9ucy9ncm91cEFjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge0ltYWdlQWN0aW9uc09wdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvaW1hZ2VBY3Rpb25zL2ltYWdlQWN0aW9ucy5qcyc7XG5pbXBvcnQgdHlwZSB7TG9jYXRpb25BY3Rpb25zT3B0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9sb2NhdGlvbkFjdGlvbnMvbG9jYXRpb25BY3Rpb25zLmpzJztcbmltcG9ydCB0eXBlIHtNZXNzYWdlQWN0aW9uc09wdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvbWVzc2FnZUFjdGlvbnMvbWVzc2FnZUFjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge1Blcm1pc3Npb25BY3Rpb25zT3B0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9wZXJtaXNzaW9uQWN0aW9ucy9wZXJtaXNzaW9uQWN0aW9ucy5qcyc7XG5pbXBvcnQgdHlwZSB7UG9zdEFjdGlvbnNPcHRpb25zfSBmcm9tICcuLi9hY3Rpb25zL3Bvc3RBY3Rpb25zL3Bvc3RBY3Rpb25zLmpzJztcbmltcG9ydCB0eXBlIHtQZXJzb25hQWN0aW9uc09wdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvcGVyc29uYUFjdGlvbnMvcGVyc29uYUFjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge1JlYWN0aW9uQWN0aW9uc09wdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvcmVhY3Rpb25BY3Rpb25zL3JlYWN0aW9uQWN0aW9ucy5qcyc7XG5pbXBvcnQgdHlwZSB7UmVzdEFjdGlvbnNPcHRpb25zfSBmcm9tICcuLi9hY3Rpb25zL3Jlc3RBY3Rpb25zL3Jlc3RBY3Rpb25zLmpzJztcbmltcG9ydCB0eXBlIHtTU0VBY3Rpb25zT3B0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy9zc2VBY3Rpb25zL3NzZUFjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge1RhZ0FjdGlvbnNPcHRpb25zfSBmcm9tICcuLi9hY3Rpb25zL3RhZ0FjdGlvbnMvdGFnQWN0aW9ucy5qcyc7XG5pbXBvcnQgdHlwZSB7VHJhbnNsYXRpb25BY3Rpb25zT3B0aW9uc30gZnJvbSAnLi4vYWN0aW9ucy90cmFuc2xhdGlvbkFjdGlvbnMvdHJhbnNsYXRpb25BY3Rpb25zLmpzJztcbmltcG9ydCB0eXBlIHtVc2VyQWN0aW9uc09wdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvdXNlckFjdGlvbnMvdXNlckFjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge1ZpZGVvQWN0aW9uc09wdGlvbnN9IGZyb20gJy4uL2FjdGlvbnMvdmlkZW9BY3Rpb25zL3ZpZGVvQWN0aW9ucy5qcyc7XG5cbmNvbnN0IHdlYnNvY2tldEFjdGlvbkNhY2hlID0gbmV3IFdlYWtNYXA8Rmx1eEZyYW1ld29yaywgUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlV2Vic29ja2V0QWN0aW9ucz4+KCk7XG5cbmV4cG9ydCB0eXBlIEFjdGlvblR5cGUgPVxuICB8ICdhd3NSdW0nXG4gIHwgJ2NvbnRlbnQnXG4gIHwgJ2NybSdcbiAgfCAnZXZlbnQnXG4gIHwgJ2dyb3VwJ1xuICB8ICdpbWFnZSdcbiAgfCAnbG9jYXRpb24nXG4gIHwgJ21lc3NhZ2UnXG4gIHwgJ3Blcm1pc3Npb24nXG4gIHwgJ3Bvc3QnXG4gIHwgJ3BlcnNvbmEnXG4gIHwgJ3JlYWN0aW9uJ1xuICB8ICdyZXN0J1xuICB8ICdzc2UnXG4gIHwgJ3N1YnNjcmlwdGlvbidcbiAgfCAndGFnJ1xuICB8ICd0cmFuc2xhdGlvbidcbiAgfCAndXNlcidcbiAgfCAndmlkZW8nXG4gIHwgJ3dlYnNvY2tldCc7XG5cbmV4cG9ydCB0eXBlIEFjdGlvbk9wdGlvbnMgPVxuICB8IEF3c1J1bUFjdGlvbnNPcHRpb25zXG4gIHwgQ29udGVudEFjdGlvbnNPcHRpb25zXG4gIHwgQ3JtQWN0aW9uc09wdGlvbnNcbiAgfCBFdmVudEFjdGlvbnNPcHRpb25zXG4gIHwgR3JvdXBBY3Rpb25zT3B0aW9uc1xuICB8IEltYWdlQWN0aW9uc09wdGlvbnNcbiAgfCBMb2NhdGlvbkFjdGlvbnNPcHRpb25zXG4gIHwgTWVzc2FnZUFjdGlvbnNPcHRpb25zXG4gIHwgUGVybWlzc2lvbkFjdGlvbnNPcHRpb25zXG4gIHwgUG9zdEFjdGlvbnNPcHRpb25zXG4gIHwgUGVyc29uYUFjdGlvbnNPcHRpb25zXG4gIHwgUmVhY3Rpb25BY3Rpb25zT3B0aW9uc1xuICB8IFJlc3RBY3Rpb25zT3B0aW9uc1xuICB8IFNTRUFjdGlvbnNPcHRpb25zXG4gIHwgVGFnQWN0aW9uc09wdGlvbnNcbiAgfCBUcmFuc2xhdGlvbkFjdGlvbnNPcHRpb25zXG4gIHwgVXNlckFjdGlvbnNPcHRpb25zXG4gIHwgVmlkZW9BY3Rpb25zT3B0aW9uc1xuICB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUFjdGlvbiA9IDxUIGV4dGVuZHMgQWN0aW9uVHlwZT4oXG4gIGFjdGlvblR5cGU6IFQsXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIG9wdGlvbnM/OiBBY3Rpb25PcHRpb25zXG4pID0+IHtcbiAgc3dpdGNoKGFjdGlvblR5cGUpIHtcbiAgICBjYXNlICdhd3NSdW0nOlxuICAgICAgcmV0dXJuIGNyZWF0ZUF3c1J1bUFjdGlvbnMoZmx1eCwgb3B0aW9ucyBhcyBBd3NSdW1BY3Rpb25zT3B0aW9ucyk7XG5cbiAgICBjYXNlICdjb250ZW50JzpcbiAgICAgIHJldHVybiBjcmVhdGVDb250ZW50QWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIENvbnRlbnRBY3Rpb25zT3B0aW9ucyk7XG5cbiAgICBjYXNlICdjcm0nOlxuICAgICAgcmV0dXJuIGNyZWF0ZUNybUFjdGlvbnMoZmx1eCwgb3B0aW9ucyBhcyBDcm1BY3Rpb25zT3B0aW9ucyk7XG5cbiAgICBjYXNlICdldmVudCc6XG4gICAgICByZXR1cm4gY3JlYXRlRXZlbnRBY3Rpb25zKGZsdXgsIG9wdGlvbnMgYXMgRXZlbnRBY3Rpb25zT3B0aW9ucyk7XG5cbiAgICBjYXNlICdncm91cCc6XG4gICAgICByZXR1cm4gY3JlYXRlR3JvdXBBY3Rpb25zKGZsdXgsIG9wdGlvbnMgYXMgR3JvdXBBY3Rpb25zT3B0aW9ucyk7XG5cbiAgICBjYXNlICdpbWFnZSc6XG4gICAgICByZXR1cm4gY3JlYXRlSW1hZ2VBY3Rpb25zKGZsdXgsIG9wdGlvbnMgYXMgSW1hZ2VBY3Rpb25zT3B0aW9ucyk7XG5cbiAgICBjYXNlICdsb2NhdGlvbic6XG4gICAgICByZXR1cm4gY3JlYXRlTG9jYXRpb25BY3Rpb25zKGZsdXgsIG9wdGlvbnMgYXMgTG9jYXRpb25BY3Rpb25zT3B0aW9ucyk7XG5cbiAgICBjYXNlICdtZXNzYWdlJzpcbiAgICAgIHJldHVybiBjcmVhdGVNZXNzYWdlQWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIE1lc3NhZ2VBY3Rpb25zT3B0aW9ucyk7XG5cbiAgICBjYXNlICdwZXJtaXNzaW9uJzpcbiAgICAgIHJldHVybiBjcmVhdGVQZXJtaXNzaW9uQWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIFBlcm1pc3Npb25BY3Rpb25zT3B0aW9ucyk7XG5cbiAgICBjYXNlICdwb3N0JzpcbiAgICAgIHJldHVybiBjcmVhdGVQb3N0QWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIFBvc3RBY3Rpb25zT3B0aW9ucyk7XG5cbiAgICBjYXNlICdwZXJzb25hJzpcbiAgICAgIHJldHVybiBjcmVhdGVQZXJzb25hQWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIFBlcnNvbmFBY3Rpb25zT3B0aW9ucyk7XG5cbiAgICBjYXNlICdyZWFjdGlvbic6XG4gICAgICByZXR1cm4gY3JlYXRlUmVhY3Rpb25BY3Rpb25zKGZsdXgsIG9wdGlvbnMgYXMgUmVhY3Rpb25BY3Rpb25zT3B0aW9ucyk7XG5cbiAgICBjYXNlICdyZXN0JzpcbiAgICAgIHJldHVybiBjcmVhdGVSZXN0QWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIFJlc3RBY3Rpb25zT3B0aW9ucyk7XG5cbiAgICBjYXNlICdzc2UnOlxuICAgICAgcmV0dXJuIGNyZWF0ZVNTRUFjdGlvbnMoZmx1eCwgb3B0aW9ucyBhcyBTU0VBY3Rpb25zT3B0aW9ucyk7XG5cbiAgICBjYXNlICdzdWJzY3JpcHRpb24nOlxuICAgICAgcmV0dXJuIGNyZWF0ZVN1YnNjcmlwdGlvbkFjdGlvbnMoZmx1eCk7XG5cbiAgICBjYXNlICd0YWcnOlxuICAgICAgcmV0dXJuIGNyZWF0ZVRhZ0FjdGlvbnMoZmx1eCwgb3B0aW9ucyBhcyBUYWdBY3Rpb25zT3B0aW9ucyk7XG5cbiAgICBjYXNlICd0cmFuc2xhdGlvbic6XG4gICAgICByZXR1cm4gY3JlYXRlVHJhbnNsYXRpb25BY3Rpb25zKGZsdXgsIG9wdGlvbnMgYXMgVHJhbnNsYXRpb25BY3Rpb25zT3B0aW9ucyk7XG5cbiAgICBjYXNlICd1c2VyJzpcbiAgICAgIHJldHVybiBjcmVhdGVVc2VyQWN0aW9ucyhmbHV4LCBvcHRpb25zIGFzIFVzZXJBY3Rpb25zT3B0aW9ucyk7XG5cbiAgICBjYXNlICd2aWRlbyc6XG4gICAgICByZXR1cm4gY3JlYXRlVmlkZW9BY3Rpb25zKGZsdXgsIG9wdGlvbnMgYXMgVmlkZW9BY3Rpb25zT3B0aW9ucyk7XG5cbiAgICBjYXNlICd3ZWJzb2NrZXQnOlxuICAgICAgaWYoIXdlYnNvY2tldEFjdGlvbkNhY2hlLmhhcyhmbHV4KSkge1xuICAgICAgICB3ZWJzb2NrZXRBY3Rpb25DYWNoZS5zZXQoZmx1eCwgY3JlYXRlV2Vic29ja2V0QWN0aW9ucyhmbHV4KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3ZWJzb2NrZXRBY3Rpb25DYWNoZS5nZXQoZmx1eCkgYXMgUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlV2Vic29ja2V0QWN0aW9ucz47XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFjdGlvbiB0eXBlOiAke2FjdGlvblR5cGV9YCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVBY3Rpb25zID0gKFxuICBhY3Rpb25UeXBlczogQWN0aW9uVHlwZVtdLFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBvcHRpb25zPzogUGFydGlhbDxSZWNvcmQ8QWN0aW9uVHlwZSwgQWN0aW9uT3B0aW9ucz4+XG4pOiBQYXJ0aWFsPFJlY29yZDxBY3Rpb25UeXBlLCBBY3Rpb25SZXR1cm5UeXBlPEFjdGlvblR5cGU+Pj4gPT4ge1xuICBjb25zdCBhY3Rpb25zOiBQYXJ0aWFsPFJlY29yZDxBY3Rpb25UeXBlLCBBY3Rpb25SZXR1cm5UeXBlPEFjdGlvblR5cGU+Pj4gPSB7fTtcblxuICBhY3Rpb25UeXBlcy5mb3JFYWNoKCh0eXBlKSA9PiB7XG4gICAgYWN0aW9uc1t0eXBlXSA9IGNyZWF0ZUFjdGlvbih0eXBlLCBmbHV4LCBvcHRpb25zPy5bdHlwZV0pIGFzIEFjdGlvblJldHVyblR5cGU8QWN0aW9uVHlwZT47XG4gIH0pO1xuXG4gIHJldHVybiBhY3Rpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUFsbEFjdGlvbnMgPSAoXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIG9wdGlvbnM/OiBQYXJ0aWFsPFJlY29yZDxBY3Rpb25UeXBlLCBBY3Rpb25PcHRpb25zPj5cbikgPT4ge1xuICBjb25zdCBhbGxBY3Rpb25UeXBlczogQWN0aW9uVHlwZVtdID0gW1xuICAgICdhd3NSdW0nLFxuICAgICdjb250ZW50JyxcbiAgICAnY3JtJyxcbiAgICAnZXZlbnQnLFxuICAgICdncm91cCcsXG4gICAgJ2ltYWdlJyxcbiAgICAnbG9jYXRpb24nLFxuICAgICdtZXNzYWdlJyxcbiAgICAncGVybWlzc2lvbicsXG4gICAgJ3Bvc3QnLFxuICAgICdwZXJzb25hJyxcbiAgICAncmVhY3Rpb24nLFxuICAgICdyZXN0JyxcbiAgICAnc3NlJyxcbiAgICAnc3Vic2NyaXB0aW9uJyxcbiAgICAndGFnJyxcbiAgICAndHJhbnNsYXRpb24nLFxuICAgICd1c2VyJyxcbiAgICAndmlkZW8nLFxuICAgICd3ZWJzb2NrZXQnXG4gIF07XG5cbiAgcmV0dXJuIGNyZWF0ZUFjdGlvbnMoYWxsQWN0aW9uVHlwZXMsIGZsdXgsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IHR5cGUgQWN0aW9uVHlwZXMgPSBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBbGxBY3Rpb25zPjtcbmV4cG9ydCB0eXBlIEFjdGlvblJldHVyblR5cGU8VCBleHRlbmRzIEFjdGlvblR5cGU+ID0gUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlQWN0aW9uPFQ+PjtcbiJdLCJuYW1lcyI6WyJjcmVhdGVDb250ZW50QWN0aW9ucyIsImNyZWF0ZUF3c1J1bUFjdGlvbnMiLCJjcmVhdGVDcm1BY3Rpb25zIiwiY3JlYXRlRXZlbnRBY3Rpb25zIiwiY3JlYXRlR3JvdXBBY3Rpb25zIiwiY3JlYXRlSW1hZ2VBY3Rpb25zIiwiY3JlYXRlTG9jYXRpb25BY3Rpb25zIiwiY3JlYXRlTWVzc2FnZUFjdGlvbnMiLCJjcmVhdGVQZXJtaXNzaW9uQWN0aW9ucyIsImNyZWF0ZVBvc3RBY3Rpb25zIiwiY3JlYXRlUGVyc29uYUFjdGlvbnMiLCJjcmVhdGVSZWFjdGlvbkFjdGlvbnMiLCJjcmVhdGVSZXN0QWN0aW9ucyIsImNyZWF0ZVNTRUFjdGlvbnMiLCJjcmVhdGVTdWJzY3JpcHRpb25BY3Rpb25zIiwiY3JlYXRlVGFnQWN0aW9ucyIsImNyZWF0ZVRyYW5zbGF0aW9uQWN0aW9ucyIsImNyZWF0ZVVzZXJBY3Rpb25zIiwiY3JlYXRlVmlkZW9BY3Rpb25zIiwiY3JlYXRlV2Vic29ja2V0QWN0aW9ucyIsIndlYnNvY2tldEFjdGlvbkNhY2hlIiwiV2Vha01hcCIsImNyZWF0ZUFjdGlvbiIsImFjdGlvblR5cGUiLCJmbHV4Iiwib3B0aW9ucyIsImhhcyIsInNldCIsImdldCIsIkVycm9yIiwiY3JlYXRlQWN0aW9ucyIsImFjdGlvblR5cGVzIiwiYWN0aW9ucyIsImZvckVhY2giLCJ0eXBlIiwiY3JlYXRlQWxsQWN0aW9ucyIsImFsbEFjdGlvblR5cGVzIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxvQkFBb0IsUUFBTyw4Q0FBOEM7QUFDakYsU0FBUUMsbUJBQW1CLFFBQU8sNENBQTRDO0FBQzlFLFNBQVFDLGdCQUFnQixRQUFPLHNDQUFzQztBQUNyRSxTQUFRQyxrQkFBa0IsUUFBTywwQ0FBMEM7QUFDM0UsU0FBUUMsa0JBQWtCLFFBQU8sMENBQTBDO0FBQzNFLFNBQVFDLGtCQUFrQixRQUFPLDBDQUEwQztBQUMzRSxTQUFRQyxxQkFBcUIsUUFBTyxnREFBZ0Q7QUFDcEYsU0FBUUMsb0JBQW9CLFFBQU8sOENBQThDO0FBQ2pGLFNBQVFDLHVCQUF1QixRQUFPLG9EQUFvRDtBQUMxRixTQUFRQyxpQkFBaUIsUUFBTyx3Q0FBd0M7QUFDeEUsU0FBUUMsb0JBQW9CLFFBQU8sOENBQThDO0FBQ2pGLFNBQVFDLHFCQUFxQixRQUFPLGdEQUFnRDtBQUNwRixTQUFRQyxpQkFBaUIsUUFBTyx3Q0FBd0M7QUFDeEUsU0FBUUMsZ0JBQWdCLFFBQU8sc0NBQXNDO0FBQ3JFLFNBQVFDLHlCQUF5QixRQUFPLHdEQUF3RDtBQUNoRyxTQUFRQyxnQkFBZ0IsUUFBTyxzQ0FBc0M7QUFDckUsU0FBUUMsd0JBQXdCLFFBQU8sc0RBQXNEO0FBQzdGLFNBQVFDLGlCQUFpQixRQUFPLHdDQUF3QztBQUN4RSxTQUFRQyxrQkFBa0IsUUFBTywwQ0FBMEM7QUFDM0UsU0FBUUMsc0JBQXNCLFFBQU8sa0RBQWtEO0FBc0J2RixNQUFNQyx1QkFBdUIsSUFBSUM7QUE2Q2pDLE9BQU8sTUFBTUMsZUFBZSxDQUMxQkMsWUFDQUMsTUFDQUM7SUFFQSxPQUFPRjtRQUNMLEtBQUs7WUFDSCxPQUFPdEIsb0JBQW9CdUIsTUFBTUM7UUFFbkMsS0FBSztZQUNILE9BQU96QixxQkFBcUJ3QixNQUFNQztRQUVwQyxLQUFLO1lBQ0gsT0FBT3ZCLGlCQUFpQnNCLE1BQU1DO1FBRWhDLEtBQUs7WUFDSCxPQUFPdEIsbUJBQW1CcUIsTUFBTUM7UUFFbEMsS0FBSztZQUNILE9BQU9yQixtQkFBbUJvQixNQUFNQztRQUVsQyxLQUFLO1lBQ0gsT0FBT3BCLG1CQUFtQm1CLE1BQU1DO1FBRWxDLEtBQUs7WUFDSCxPQUFPbkIsc0JBQXNCa0IsTUFBTUM7UUFFckMsS0FBSztZQUNILE9BQU9sQixxQkFBcUJpQixNQUFNQztRQUVwQyxLQUFLO1lBQ0gsT0FBT2pCLHdCQUF3QmdCLE1BQU1DO1FBRXZDLEtBQUs7WUFDSCxPQUFPaEIsa0JBQWtCZSxNQUFNQztRQUVqQyxLQUFLO1lBQ0gsT0FBT2YscUJBQXFCYyxNQUFNQztRQUVwQyxLQUFLO1lBQ0gsT0FBT2Qsc0JBQXNCYSxNQUFNQztRQUVyQyxLQUFLO1lBQ0gsT0FBT2Isa0JBQWtCWSxNQUFNQztRQUVqQyxLQUFLO1lBQ0gsT0FBT1osaUJBQWlCVyxNQUFNQztRQUVoQyxLQUFLO1lBQ0gsT0FBT1gsMEJBQTBCVTtRQUVuQyxLQUFLO1lBQ0gsT0FBT1QsaUJBQWlCUyxNQUFNQztRQUVoQyxLQUFLO1lBQ0gsT0FBT1QseUJBQXlCUSxNQUFNQztRQUV4QyxLQUFLO1lBQ0gsT0FBT1Isa0JBQWtCTyxNQUFNQztRQUVqQyxLQUFLO1lBQ0gsT0FBT1AsbUJBQW1CTSxNQUFNQztRQUVsQyxLQUFLO1lBQ0gsSUFBRyxDQUFDTCxxQkFBcUJNLEdBQUcsQ0FBQ0YsT0FBTztnQkFDbENKLHFCQUFxQk8sR0FBRyxDQUFDSCxNQUFNTCx1QkFBdUJLO1lBQ3hEO1lBRUEsT0FBT0oscUJBQXFCUSxHQUFHLENBQUNKO1FBRWxDO1lBQ0UsTUFBTSxJQUFJSyxNQUFNLENBQUMscUJBQXFCLEVBQUVOLFlBQVk7SUFDeEQ7QUFDRixFQUFFO0FBRUYsT0FBTyxNQUFNTyxnQkFBZ0IsQ0FDM0JDLGFBQ0FQLE1BQ0FDO0lBRUEsTUFBTU8sVUFBcUUsQ0FBQztJQUU1RUQsWUFBWUUsT0FBTyxDQUFDLENBQUNDO1FBQ25CRixPQUFPLENBQUNFLEtBQUssR0FBR1osYUFBYVksTUFBTVYsTUFBTUMsU0FBUyxDQUFDUyxLQUFLO0lBQzFEO0lBRUEsT0FBT0Y7QUFDVCxFQUFFO0FBRUYsT0FBTyxNQUFNRyxtQkFBbUIsQ0FDOUJYLE1BQ0FDO0lBRUEsTUFBTVcsaUJBQStCO1FBQ25DO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7S0FDRDtJQUVELE9BQU9OLGNBQWNNLGdCQUFnQlosTUFBTUM7QUFDN0MsRUFBRSJ9
@@ -4,7 +4,12 @@ export interface ApiOptions {
4
4
  readonly onSuccess?: (data: any) => Promise<FluxAction>;
5
5
  readonly variables?: Record<string, unknown>;
6
6
  }
7
- export type ReaktorDbCollection = 'apps' | 'connections' | 'contents' | 'conversations' | 'events' | 'files' | 'groups' | 'images' | 'locations' | 'messages' | 'notifications' | 'payments' | 'permissions' | 'posts' | 'personas' | 'reactions' | 'subscriptions' | 'tags' | 'translations' | 'users' | 'videos';
7
+ export type RestMethod = 'DELETE' | 'GET' | 'PATCH' | 'POST' | 'PUT' | (string & {});
8
+ export interface RestApiOptions extends HunterOptionsType {
9
+ readonly authenticate?: boolean;
10
+ readonly onSuccess?: (data: any) => any;
11
+ }
12
+ export type ReaktorDbCollection = 'apps' | 'connections' | 'contents' | 'conversations' | 'crm' | 'events' | 'files' | 'groups' | 'images' | 'locations' | 'messages' | 'notifications' | 'payments' | 'permissions' | 'posts' | 'personas' | 'reactions' | 'rum' | 'subscriptions' | 'tags' | 'translations' | 'users' | 'videos';
8
13
  export interface ApiQueryVariableType {
9
14
  readonly type: string;
10
15
  readonly value: unknown;
@@ -16,7 +21,12 @@ export interface ApiResultsType {
16
21
  readonly [key: string]: unknown;
17
22
  }
18
23
  export interface RetryType {
19
- readonly query: HunterQueryType | HunterQueryType[];
24
+ readonly query?: HunterQueryType | HunterQueryType[];
25
+ readonly request?: {
26
+ readonly method: string;
27
+ readonly params?: unknown;
28
+ readonly url: string;
29
+ };
20
30
  readonly responseMethod: (results: ApiResultsType) => void;
21
31
  }
22
32
  export interface SessionType {
@@ -27,6 +37,8 @@ export interface SessionType {
27
37
  readonly username?: string;
28
38
  }
29
39
  export declare const getGraphql: (flux: FluxFramework, url: string, authenticate: boolean, query: HunterQueryType | HunterQueryType[], options: ApiOptions) => Promise<ApiResultsType>;
40
+ export declare const resolveRestEndpoint: (flux: FluxFramework, endpoint: string) => string;
41
+ export declare const restRequest: <T = ApiResultsType>(flux: FluxFramework, endpoint: string, method?: RestMethod, params?: unknown, options?: RestApiOptions) => Promise<T>;
30
42
  export declare const createQuery: (name: string, dataType: ReaktorDbCollection, variables?: ApiQueryVariables, returnProperties?: string[], type?: string) => {
31
43
  query: string;
32
44
  variables: Record<string, unknown>;
@@ -39,6 +51,7 @@ export declare const appQuery: <T>(flux: FluxFramework, name: string, dataType:
39
51
  export declare const appMutation: <T>(flux: FluxFramework, name: string, dataType: ReaktorDbCollection, queryVariables: ApiQueryVariables, returnProperties: string[], options?: ApiOptions) => Promise<T>;
40
52
  export declare const publicQuery: <T>(flux: FluxFramework, name: string, dataType: ReaktorDbCollection, queryVariables: ApiQueryVariables, returnProperties: string[], options?: ApiOptions) => Promise<T>;
41
53
  export declare const publicMutation: <T>(flux: FluxFramework, name: string, dataType: ReaktorDbCollection, queryVariables: ApiQueryVariables, returnProperties: string[], options?: ApiOptions) => Promise<T>;
54
+ export declare const rumMutation: <T>(flux: FluxFramework, name: string, dataType: ReaktorDbCollection, queryVariables: ApiQueryVariables, returnProperties: string[], options?: ApiOptions) => Promise<T>;
42
55
  export declare const uploadImage: (flux: FluxFramework, image: any, options?: HunterOptionsType) => Promise<ApiResultsType>;
43
56
  export declare const refreshSession: (flux: FluxFramework, token?: string, expires?: number) => Promise<FluxAction | null>;
44
57
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"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"}
package/lib/utils/api.js CHANGED
@@ -1,4 +1,4 @@
1
- import { ApiError, graphqlQuery, post } from '@nlabs/rip-hunter';
1
+ import { ApiError, ajax, del, get, graphqlQuery, post, put } from '@nlabs/rip-hunter';
2
2
  import { camelCase, isEmpty, upperFirst } from '@nlabs/utils';
3
3
  import { APP_CONSTANTS } from '../stores/appStore.js';
4
4
  import { USER_CONSTANTS } from '../stores/userStore.js';
@@ -15,6 +15,39 @@ const clearInvalidSessionState = async (flux)=>{
15
15
  type: USER_CONSTANTS.SIGN_OUT_SUCCESS
16
16
  });
17
17
  };
18
+ const resolveAuthToken = async (flux)=>{
19
+ const stateSession = flux.getState('user.session') || {};
20
+ const hydratedSession = stateSession.token ? stateSession : await hydrateSessionFromStorage(flux);
21
+ const { expires: authExpires = 0, issued: authIssued = 0, token: hydratedToken } = hydratedSession || {};
22
+ let token = hydratedToken || stateSession.token;
23
+ if (!token) {
24
+ throw new ApiError([
25
+ 'invalid_session'
26
+ ], 'invalid_session');
27
+ }
28
+ const tokenExpiresAt = parseJwtExpiryMs(token);
29
+ if (tokenExpiresAt > 0 && Date.now() >= tokenExpiresAt) {
30
+ throw new ApiError([
31
+ 'expired_session'
32
+ ], 'expired_session');
33
+ }
34
+ const config = getConfigFromFlux(flux);
35
+ const minutesUntilExpiry = getMinutesUntil(Number(authExpires || 0));
36
+ const sessionLifetimeMinutes = Math.round((authExpires - authIssued) / (1000 * 60));
37
+ const refreshWindowMinutes = getRefreshWindowMinutes(sessionLifetimeMinutes || DEFAULT_SESSION_MAX_MINUTES, config.app?.session || {});
38
+ const refreshExpiresMinutes = Math.max(1, Number(config.app?.session?.maxMinutes || sessionLifetimeMinutes || DEFAULT_SESSION_MAX_MINUTES));
39
+ if (minutesUntilExpiry > 0 && minutesUntilExpiry <= refreshWindowMinutes) {
40
+ const { session: updatedSession = {} } = await refreshSession(flux, token, refreshExpiresMinutes) || {};
41
+ const { token: newToken } = updatedSession || {};
42
+ if (!newToken) {
43
+ throw new ApiError([
44
+ 'invalid_session'
45
+ ], 'invalid_session');
46
+ }
47
+ token = newToken;
48
+ }
49
+ return token;
50
+ };
18
51
  export const getGraphql = async (flux, url, authenticate, query, options)=>{
19
52
  try {
20
53
  const { onSuccess } = options;
@@ -29,38 +62,9 @@ export const getGraphql = async (flux, url, authenticate, query, options)=>{
29
62
  type: APP_CONSTANTS.API_NETWORK_ERROR
30
63
  });
31
64
  }
32
- const stateSession = flux.getState('user.session') || {};
33
65
  let token;
34
66
  if (authenticate) {
35
- const hydratedSession = stateSession.token ? stateSession : await hydrateSessionFromStorage(flux);
36
- const { expires: authExpires = 0, issued: authIssued = 0, token: hydratedToken } = hydratedSession || {};
37
- token = hydratedToken || stateSession.token;
38
- if (!token) {
39
- throw new ApiError([
40
- 'invalid_session'
41
- ], 'invalid_session');
42
- }
43
- const tokenExpiresAt = parseJwtExpiryMs(token);
44
- if (tokenExpiresAt > 0 && Date.now() >= tokenExpiresAt) {
45
- throw new ApiError([
46
- 'expired_session'
47
- ], 'expired_session');
48
- }
49
- const config = getConfigFromFlux(flux);
50
- const minutesUntilExpiry = getMinutesUntil(Number(authExpires || 0));
51
- const sessionLifetimeMinutes = Math.round((authExpires - authIssued) / (1000 * 60));
52
- const refreshWindowMinutes = getRefreshWindowMinutes(sessionLifetimeMinutes || DEFAULT_SESSION_MAX_MINUTES, config.app?.session || {});
53
- const refreshExpiresMinutes = Math.max(1, Number(config.app?.session?.maxMinutes || sessionLifetimeMinutes || DEFAULT_SESSION_MAX_MINUTES));
54
- if (minutesUntilExpiry > 0 && minutesUntilExpiry <= refreshWindowMinutes) {
55
- const { session: updatedSession = {} } = await refreshSession(flux, token, refreshExpiresMinutes) || {};
56
- const { token: newToken } = updatedSession || {};
57
- if (!newToken) {
58
- throw new ApiError([
59
- 'invalid_session'
60
- ], 'invalid_session');
61
- }
62
- token = newToken;
63
- }
67
+ token = await resolveAuthToken(flux);
64
68
  }
65
69
  return graphqlQuery(url, query, {
66
70
  token: token || ''
@@ -93,6 +97,84 @@ export const getGraphql = async (flux, url, authenticate, query, options)=>{
93
97
  throw error;
94
98
  }
95
99
  };
100
+ export const resolveRestEndpoint = (flux, endpoint)=>{
101
+ const targetEndpoint = String(endpoint || '').trim();
102
+ if (isEmpty(targetEndpoint)) {
103
+ throw new ApiError([
104
+ 'invalid_url'
105
+ ], 'rest_endpoint_required');
106
+ }
107
+ if (/^https?:\/\//i.test(targetEndpoint)) {
108
+ return targetEndpoint;
109
+ }
110
+ const config = getConfigFromFlux(flux);
111
+ const configuredEndpoint = config.app?.api?.endpoints?.[targetEndpoint] || '';
112
+ if (isEmpty(configuredEndpoint)) {
113
+ throw new ApiError([
114
+ 'invalid_url'
115
+ ], `rest_endpoint_not_configured:${targetEndpoint}`);
116
+ }
117
+ return configuredEndpoint;
118
+ };
119
+ export const restRequest = async (flux, endpoint, method = 'GET', params, options = {})=>{
120
+ const { authenticate = false, onSuccess, ...hunterOptions } = options;
121
+ const url = resolveRestEndpoint(flux, endpoint);
122
+ const requestMethod = String(method || 'GET').toUpperCase();
123
+ const retry = {
124
+ request: {
125
+ method: requestMethod,
126
+ params,
127
+ url
128
+ },
129
+ responseMethod: onSuccess || (()=>{})
130
+ };
131
+ try {
132
+ const networkType = flux.getState('app.networkType');
133
+ if (networkType === 'none') {
134
+ return flux.dispatch({
135
+ retry,
136
+ type: APP_CONSTANTS.API_NETWORK_ERROR
137
+ });
138
+ }
139
+ const token = authenticate ? await resolveAuthToken(flux) : hunterOptions.token;
140
+ const requestOptions = {
141
+ ...hunterOptions,
142
+ ...token ? {
143
+ token
144
+ } : {}
145
+ };
146
+ let data;
147
+ switch(requestMethod){
148
+ case 'DELETE':
149
+ data = await del(url, params, requestOptions);
150
+ break;
151
+ case 'GET':
152
+ data = await get(url, params, requestOptions);
153
+ break;
154
+ case 'POST':
155
+ data = await post(url, params, requestOptions);
156
+ break;
157
+ case 'PUT':
158
+ data = await put(url, params, requestOptions);
159
+ break;
160
+ default:
161
+ data = await ajax(url, requestMethod, params, requestOptions);
162
+ break;
163
+ }
164
+ await flux.dispatch({
165
+ type: APP_CONSTANTS.API_NETWORK_SUCCESS
166
+ });
167
+ return onSuccess ? onSuccess(data) : data;
168
+ } catch (error) {
169
+ const errors = error instanceof ApiError ? error.errors : [];
170
+ const message = error instanceof Error ? error.message : '';
171
+ if (errors.includes('invalid_session') || errors.includes('expired_session') || message === 'invalid_session' || message === 'expired_session') {
172
+ await clearInvalidSessionState(flux);
173
+ return {};
174
+ }
175
+ throw error;
176
+ }
177
+ };
96
178
  export const createQuery = (name, dataType, variables = {}, returnProperties = [], type = 'query')=>{
97
179
  const queryVariables = {
98
180
  ...variables || {}
@@ -150,6 +232,12 @@ export const publicMutation = (flux, name, dataType, queryVariables, returnPrope
150
232
  const publicUrl = config.app?.api?.public || '';
151
233
  return getGraphql(flux, publicUrl, false, query, options);
152
234
  };
235
+ export const rumMutation = (flux, name, dataType, queryVariables, returnProperties, options = {})=>{
236
+ const query = createMutation(name, dataType, queryVariables, returnProperties);
237
+ const config = getConfigFromFlux(flux);
238
+ const rumUrl = config.app?.api?.rum || '';
239
+ return getGraphql(flux, rumUrl, false, query, options);
240
+ };
153
241
  export const uploadImage = (flux, image, options = {})=>{
154
242
  const config = getConfigFromFlux(flux);
155
243
  const uploadImageUrl = config.app?.api?.uploadImage || '';
@@ -250,4 +338,4 @@ export const refreshSession = async (flux, token, expires)=>{
250
338
  }
251
339
  };
252
340
 
253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvYXBpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBpRXJyb3IsIGdyYXBocWxRdWVyeSwgcG9zdH0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuaW1wb3J0IHtjYW1lbENhc2UsIGlzRW1wdHksIHVwcGVyRmlyc3R9IGZyb20gJ0BubGFicy91dGlscyc7XG5cbmltcG9ydCB7QVBQX0NPTlNUQU5UU30gZnJvbSAnLi4vc3RvcmVzL2FwcFN0b3JlLmpzJztcbmltcG9ydCB7VVNFUl9DT05TVEFOVFN9IGZyb20gJy4uL3N0b3Jlcy91c2VyU3RvcmUuanMnO1xuaW1wb3J0IHtnZXRDb25maWdGcm9tRmx1eH0gZnJvbSAnLi9jb25maWdVdGlscy5qcyc7XG5pbXBvcnQge2NsZWFyUGVyc2lzdGVkU2Vzc2lvbiwgZ2V0UmVmcmVzaFdpbmRvd01pbnV0ZXMsIGh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UsIHBhcnNlSnd0RXhwaXJ5TXMsIHN0b3JlU2Vzc2lvbn0gZnJvbSAnLi9zZXNzaW9uLmpzJztcblxuaW1wb3J0IHR5cGUge0ZsdXhBY3Rpb24sIEZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5pbXBvcnQgdHlwZSB7SHVudGVyT3B0aW9uc1R5cGUsIEh1bnRlclF1ZXJ5VHlwZX0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwaU9wdGlvbnMge1xuICByZWFkb25seSBvblN1Y2Nlc3M/OiAoZGF0YTogYW55KSA9PiBQcm9taXNlPEZsdXhBY3Rpb24+O1xuICByZWFkb25seSB2YXJpYWJsZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZXhwb3J0IHR5cGUgUmVha3RvckRiQ29sbGVjdGlvbiA9XG4gICdhcHBzJyB8XG4gICdjb25uZWN0aW9ucycgfFxuICAnY29udGVudHMnIHxcbiAgJ2NvbnZlcnNhdGlvbnMnIHxcbiAgJ2V2ZW50cycgfFxuICAnZmlsZXMnIHxcbiAgJ2dyb3VwcycgfFxuICAnaW1hZ2VzJyB8XG4gICdsb2NhdGlvbnMnIHxcbiAgJ21lc3NhZ2VzJyB8XG4gICdub3RpZmljYXRpb25zJyB8XG4gICdwYXltZW50cycgfFxuICAncGVybWlzc2lvbnMnIHxcbiAgJ3Bvc3RzJyB8XG4gICdwZXJzb25hcycgfFxuICAncmVhY3Rpb25zJyB8XG4gICdzdWJzY3JpcHRpb25zJyB8XG4gICd0YWdzJyB8XG4gICd0cmFuc2xhdGlvbnMnIHxcbiAgJ3VzZXJzJyB8XG4gICd2aWRlb3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwaVF1ZXJ5VmFyaWFibGVUeXBlIHtcbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuICByZWFkb25seSB2YWx1ZTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcGlRdWVyeVZhcmlhYmxlcyB7XG4gIHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IEFwaVF1ZXJ5VmFyaWFibGVUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwaVJlc3VsdHNUeXBlIHtcbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeVR5cGUge1xuICByZWFkb25seSBxdWVyeTogSHVudGVyUXVlcnlUeXBlIHwgSHVudGVyUXVlcnlUeXBlW107XG4gIHJlYWRvbmx5IHJlc3BvbnNlTWV0aG9kOiAocmVzdWx0czogQXBpUmVzdWx0c1R5cGUpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvblR5cGUge1xuICByZWFkb25seSBleHBpcmVzPzogbnVtYmVyO1xuICByZWFkb25seSBpc3N1ZWQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHRva2VuPzogc3RyaW5nO1xuICByZWFkb25seSB1c2VySWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVzZXJuYW1lPzogc3RyaW5nO1xufVxuXG5jb25zdCBERUZBVUxUX1JFRlJFU0hfV0lORE9XX01JTlVURVMgPSA1O1xuY29uc3QgREVGQVVMVF9TRVNTSU9OX01BWF9NSU5VVEVTID0gMTU7XG5cbmNvbnN0IGdldE1pbnV0ZXNVbnRpbCA9IChleHBpcmVzQXQ6IG51bWJlcik6IG51bWJlciA9PlxuICBNYXRoLnJvdW5kKChleHBpcmVzQXQgLSBEYXRlLm5vdygpKSAvICgxMDAwICogNjApKTtcblxuY29uc3QgY2xlYXJJbnZhbGlkU2Vzc2lvblN0YXRlID0gYXN5bmMgKGZsdXg6IEZsdXhGcmFtZXdvcmspOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgYXdhaXQgY2xlYXJQZXJzaXN0ZWRTZXNzaW9uKGZsdXgpO1xuICBhd2FpdCBmbHV4LmNsZWFyQXBwRGF0YSgpO1xuICBhd2FpdCBmbHV4LmRpc3BhdGNoKHtzZXNzaW9uOiB7fSwgdHlwZTogVVNFUl9DT05TVEFOVFMuU0lHTl9PVVRfU1VDQ0VTU30pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyYXBocWwgPSBhc3luYyAoXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIHVybDogc3RyaW5nLFxuICBhdXRoZW50aWNhdGU6IGJvb2xlYW4sXG4gIHF1ZXJ5OiBIdW50ZXJRdWVyeVR5cGUgfCBIdW50ZXJRdWVyeVR5cGVbXSxcbiAgb3B0aW9uczogQXBpT3B0aW9uc1xuKTogUHJvbWlzZTxBcGlSZXN1bHRzVHlwZT4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHtvblN1Y2Nlc3N9ID0gb3B0aW9ucztcbiAgICBjb25zdCByZXRyeTogUmV0cnlUeXBlID0ge3F1ZXJ5LCByZXNwb25zZU1ldGhvZDogb25TdWNjZXNzIHx8ICgoKSA9PiB7fSl9O1xuICAgIGNvbnN0IG5ldHdvcmtUeXBlOiBzdHJpbmcgPSBmbHV4LmdldFN0YXRlKCdhcHAubmV0d29ya1R5cGUnKSBhcyBzdHJpbmc7XG5cbiAgICBpZihuZXR3b3JrVHlwZSA9PT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7cmV0cnksIHR5cGU6IEFQUF9DT05TVEFOVFMuQVBJX05FVFdPUktfRVJST1J9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0ZVNlc3Npb246IFNlc3Npb25UeXBlID0gKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicpIHx8IHt9KSBhcyBTZXNzaW9uVHlwZTtcbiAgICBsZXQgdG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGlmKGF1dGhlbnRpY2F0ZSkge1xuICAgICAgY29uc3QgaHlkcmF0ZWRTZXNzaW9uOiBTZXNzaW9uVHlwZSA9IHN0YXRlU2Vzc2lvbi50b2tlbiA/IHN0YXRlU2Vzc2lvbiA6IGF3YWl0IGh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UoZmx1eCk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGV4cGlyZXM6IGF1dGhFeHBpcmVzID0gMCxcbiAgICAgICAgaXNzdWVkOiBhdXRoSXNzdWVkID0gMCxcbiAgICAgICAgdG9rZW46IGh5ZHJhdGVkVG9rZW5cbiAgICAgIH06IFNlc3Npb25UeXBlID0gaHlkcmF0ZWRTZXNzaW9uIHx8IHt9O1xuICAgICAgdG9rZW4gPSBoeWRyYXRlZFRva2VuIHx8IHN0YXRlU2Vzc2lvbi50b2tlbjtcblxuICAgICAgaWYoIXRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBBcGlFcnJvcihbJ2ludmFsaWRfc2Vzc2lvbiddLCAnaW52YWxpZF9zZXNzaW9uJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRva2VuRXhwaXJlc0F0ID0gcGFyc2VKd3RFeHBpcnlNcyh0b2tlbik7XG5cbiAgICAgIGlmKHRva2VuRXhwaXJlc0F0ID4gMCAmJiBEYXRlLm5vdygpID49IHRva2VuRXhwaXJlc0F0KSB7XG4gICAgICAgIHRocm93IG5ldyBBcGlFcnJvcihbJ2V4cGlyZWRfc2Vzc2lvbiddLCAnZXhwaXJlZF9zZXNzaW9uJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICAgICAgY29uc3QgbWludXRlc1VudGlsRXhwaXJ5ID0gZ2V0TWludXRlc1VudGlsKE51bWJlcihhdXRoRXhwaXJlcyB8fCAwKSk7XG4gICAgICBjb25zdCBzZXNzaW9uTGlmZXRpbWVNaW51dGVzID0gTWF0aC5yb3VuZCgoYXV0aEV4cGlyZXMgLSBhdXRoSXNzdWVkKSAvICgxMDAwICogNjApKTtcbiAgICAgIGNvbnN0IHJlZnJlc2hXaW5kb3dNaW51dGVzID0gZ2V0UmVmcmVzaFdpbmRvd01pbnV0ZXMoXG4gICAgICAgIHNlc3Npb25MaWZldGltZU1pbnV0ZXMgfHwgREVGQVVMVF9TRVNTSU9OX01BWF9NSU5VVEVTLFxuICAgICAgICBjb25maWcuYXBwPy5zZXNzaW9uIHx8IHt9XG4gICAgICApO1xuICAgICAgY29uc3QgcmVmcmVzaEV4cGlyZXNNaW51dGVzID0gTWF0aC5tYXgoXG4gICAgICAgIDEsXG4gICAgICAgIE51bWJlcihjb25maWcuYXBwPy5zZXNzaW9uPy5tYXhNaW51dGVzIHx8IHNlc3Npb25MaWZldGltZU1pbnV0ZXMgfHwgREVGQVVMVF9TRVNTSU9OX01BWF9NSU5VVEVTKVxuICAgICAgKTtcblxuICAgICAgaWYobWludXRlc1VudGlsRXhwaXJ5ID4gMCAmJiBtaW51dGVzVW50aWxFeHBpcnkgPD0gcmVmcmVzaFdpbmRvd01pbnV0ZXMpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHNlc3Npb246IHVwZGF0ZWRTZXNzaW9uID0ge31cbiAgICAgICAgfTogQXBpUmVzdWx0c1R5cGUgPSAoYXdhaXQgcmVmcmVzaFNlc3Npb24oZmx1eCwgdG9rZW4sIHJlZnJlc2hFeHBpcmVzTWludXRlcykpIHx8IHt9O1xuICAgICAgICBjb25zdCB7dG9rZW46IG5ld1Rva2VufTogU2Vzc2lvblR5cGUgPSAodXBkYXRlZFNlc3Npb24gfHwge30pO1xuXG4gICAgICAgIGlmKCFuZXdUb2tlbikge1xuICAgICAgICAgIHRocm93IG5ldyBBcGlFcnJvcihbJ2ludmFsaWRfc2Vzc2lvbiddLCAnaW52YWxpZF9zZXNzaW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0b2tlbiA9IG5ld1Rva2VuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBncmFwaHFsUXVlcnkodXJsLCBxdWVyeSwge3Rva2VuOiB0b2tlbiB8fCAnJ30pXG4gICAgICAudGhlbihhc3luYyAocmVzdWx0cykgPT4ge1xuICAgICAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHt0eXBlOiBBUFBfQ09OU1RBTlRTLkFQSV9ORVRXT1JLX1NVQ0NFU1N9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgIH0pXG4gICAgICAudGhlbigoZGF0YSkgPT4gKG9uU3VjY2VzcyA/IG9uU3VjY2VzcyhkYXRhKSA6IGRhdGEpKVxuICAgICAgLmNhdGNoKGFzeW5jIChlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCB7ZXJyb3JzID0gW119ID0gZXJyb3I7XG5cbiAgICAgICAgaWYob25TdWNjZXNzICYmIGVycm9ycy5pbmNsdWRlcygnbmV0d29ya19lcnJvcicpKSB7XG4gICAgICAgICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7cmV0cnksIHR5cGU6IEFQUF9DT05TVEFOVFMuQVBJX05FVFdPUktfRVJST1J9KTtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgICB9IGVsc2UgaWYoZXJyb3JzLmluY2x1ZGVzKCdpbnZhbGlkX3Nlc3Npb24nKSB8fCBlcnJvcnMuaW5jbHVkZXMoJ2V4cGlyZWRfc2Vzc2lvbicpKSB7XG4gICAgICAgICAgYXdhaXQgY2xlYXJJbnZhbGlkU2Vzc2lvblN0YXRlKGZsdXgpO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgY29uc3QgZXJyb3JzID0gZXJyb3IgaW5zdGFuY2VvZiBBcGlFcnJvciA/IGVycm9yLmVycm9ycyA6IFtdO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICcnO1xuXG4gICAgaWYoZXJyb3JzLmluY2x1ZGVzKCdpbnZhbGlkX3Nlc3Npb24nKSB8fCBlcnJvcnMuaW5jbHVkZXMoJ2V4cGlyZWRfc2Vzc2lvbicpIHx8IG1lc3NhZ2UgPT09ICdpbnZhbGlkX3Nlc3Npb24nIHx8IG1lc3NhZ2UgPT09ICdleHBpcmVkX3Nlc3Npb24nKSB7XG4gICAgICBhd2FpdCBjbGVhckludmFsaWRTZXNzaW9uU3RhdGUoZmx1eCk7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVRdWVyeSA9IChcbiAgbmFtZTogc3RyaW5nLFxuICBkYXRhVHlwZTogUmVha3RvckRiQ29sbGVjdGlvbixcbiAgdmFyaWFibGVzOiBBcGlRdWVyeVZhcmlhYmxlcyA9IHt9LFxuICByZXR1cm5Qcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdLFxuICB0eXBlID0gJ3F1ZXJ5J1xuKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0gey4uLnZhcmlhYmxlcyB8fCB7fX07XG4gIGNvbnN0IHZhcmlhYmxlS2V5cyA9IE9iamVjdC5rZXlzKHF1ZXJ5VmFyaWFibGVzKTtcbiAgY29uc3QgcXVlcnlOYW1lID0gbmFtZS5yZXBsYWNlKC8gL2csICcnKTtcbiAgbGV0IHF1ZXJ5OiBzdHJpbmc7XG5cbiAgaWYodHlwZSA9PT0gJ211dGF0aW9uJykge1xuICAgIGNvbnN0IG11dGF0aW9uTmFtZSA9IHVwcGVyRmlyc3QoY2FtZWxDYXNlKGRhdGFUeXBlKSkgKyB1cHBlckZpcnN0KGNhbWVsQ2FzZShxdWVyeU5hbWUpKTtcbiAgICBxdWVyeSA9IGAke3R5cGV9ICR7bXV0YXRpb25OYW1lfSR7XG4gICAgICB2YXJpYWJsZUtleXMubGVuZ3RoXG4gICAgICAgID8gYCgke3ZhcmlhYmxlS2V5cy5tYXAoKGtleSkgPT4gYCQke2tleX06ICR7cXVlcnlWYXJpYWJsZXNba2V5XS50eXBlfWApLmpvaW4oJywgJyl9KWBcbiAgICAgICAgOiAnJ1xuICAgIH0ge1xuICAgICAgJHtkYXRhVHlwZX0ge1xuICAgICAgICAke2NhbWVsQ2FzZShxdWVyeU5hbWUpfSR7XG4gICAgICAgICAgdmFyaWFibGVLZXlzLmxlbmd0aFxuICAgICAgICAgICAgPyBgKCR7dmFyaWFibGVLZXlzLm1hcCgoa2V5KSA9PiBgJHtrZXl9OiAkJHtrZXl9YCkuam9pbignLCAnKX0pYFxuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9XG4gICAgICAgICR7cmV0dXJuUHJvcGVydGllcz8ubGVuZ3RoID8gYHske3JldHVyblByb3BlcnRpZXMuam9pbignLCAnKX19YCA6ICcnfVxuICAgICAgfVxuICAgIH1gO1xuICB9IGVsc2Uge1xuICAgIHF1ZXJ5ID0gYCR7dHlwZX0gJHtxdWVyeU5hbWV9JHtcbiAgICAgIHZhcmlhYmxlS2V5cy5sZW5ndGhcbiAgICAgICAgPyBgKCR7dmFyaWFibGVLZXlzLm1hcCgoa2V5KSA9PiBgJCR7a2V5fTogJHtxdWVyeVZhcmlhYmxlc1trZXldLnR5cGV9YCkuam9pbignLCAnKX0pYFxuICAgICAgICA6ICcnXG4gICAgfSB7XG4gICAgICAke2RhdGFUeXBlfSB7XG4gICAgICAgICR7Y2FtZWxDYXNlKHF1ZXJ5TmFtZSl9JHtcbiAgICAgICAgICB2YXJpYWJsZUtleXMubGVuZ3RoXG4gICAgICAgICAgICA/IGAoJHt2YXJpYWJsZUtleXMubWFwKChrZXkpID0+IGAke2tleX06ICQke2tleX1gKS5qb2luKCcsICcpfSlgXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH1cbiAgICAgICAgJHtyZXR1cm5Qcm9wZXJ0aWVzPy5sZW5ndGggPyBgeyR7cmV0dXJuUHJvcGVydGllcy5qb2luKCcsICcpfX1gIDogJyd9XG4gICAgICB9XG4gICAgfWA7XG4gIH1cblxuICBjb25zdCB1cGRhdGVkVmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHZhcmlhYmxlS2V5cy5yZWR1Y2UoKHF1ZXJ5RGF0YSwga2V5KSA9PiB7XG4gICAgcXVlcnlEYXRhW2tleV0gPSBxdWVyeVZhcmlhYmxlc1trZXldLnZhbHVlO1xuICAgIHJldHVybiBxdWVyeURhdGE7XG4gIH0sIHt9KTtcblxuICByZXR1cm4ge3F1ZXJ5LCB2YXJpYWJsZXM6IHVwZGF0ZWRWYXJpYWJsZXN9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU11dGF0aW9uID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGRhdGFUeXBlOiBSZWFrdG9yRGJDb2xsZWN0aW9uLFxuICB2YXJpYWJsZXM6IEFwaVF1ZXJ5VmFyaWFibGVzID0ge30sXG4gIHJldHVyblByb3BlcnRpZXM6IHN0cmluZ1tdID0gW11cbikgPT4gY3JlYXRlUXVlcnkobmFtZSwgZGF0YVR5cGUsIHZhcmlhYmxlcywgcmV0dXJuUHJvcGVydGllcywgJ211dGF0aW9uJyk7XG5cbmV4cG9ydCBjb25zdCBhcHBRdWVyeSA9IDxUPihcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgbmFtZTogc3RyaW5nLFxuICBkYXRhVHlwZTogUmVha3RvckRiQ29sbGVjdGlvbixcbiAgcXVlcnlWYXJpYWJsZXM6IEFwaVF1ZXJ5VmFyaWFibGVzLFxuICByZXR1cm5Qcm9wZXJ0aWVzOiBzdHJpbmdbXSxcbiAgb3B0aW9uczogQXBpT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBjcmVhdGVRdWVyeShuYW1lLCBkYXRhVHlwZSwgcXVlcnlWYXJpYWJsZXMsIHJldHVyblByb3BlcnRpZXMpO1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgY29uc3QgYXBwVXJsOiBzdHJpbmcgPSBjb25maWcuYXBwPy5hcGk/LnVybCB8fCAnJztcbiAgcmV0dXJuIGdldEdyYXBocWwoZmx1eCwgYXBwVXJsLCB0cnVlLCBxdWVyeSwgb3B0aW9ucykgYXMgUHJvbWlzZTxUPjtcbn07XG5cbmV4cG9ydCBjb25zdCBhcHBNdXRhdGlvbiA9IDxUPihcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgbmFtZTogc3RyaW5nLFxuICBkYXRhVHlwZTogUmVha3RvckRiQ29sbGVjdGlvbixcbiAgcXVlcnlWYXJpYWJsZXM6IEFwaVF1ZXJ5VmFyaWFibGVzLFxuICByZXR1cm5Qcm9wZXJ0aWVzOiBzdHJpbmdbXSxcbiAgb3B0aW9uczogQXBpT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBjcmVhdGVNdXRhdGlvbihuYW1lLCBkYXRhVHlwZSwgcXVlcnlWYXJpYWJsZXMsIHJldHVyblByb3BlcnRpZXMpO1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgY29uc3QgYXBwVXJsOiBzdHJpbmcgPSBjb25maWcuYXBwPy5hcGk/LnVybCB8fCAnJztcbiAgcmV0dXJuIGdldEdyYXBocWwoZmx1eCwgYXBwVXJsLCB0cnVlLCBxdWVyeSwgb3B0aW9ucykgYXMgUHJvbWlzZTxUPjtcbn07XG5cbmV4cG9ydCBjb25zdCBwdWJsaWNRdWVyeSA9IDxUPihcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgbmFtZTogc3RyaW5nLFxuICBkYXRhVHlwZTogUmVha3RvckRiQ29sbGVjdGlvbixcbiAgcXVlcnlWYXJpYWJsZXM6IEFwaVF1ZXJ5VmFyaWFibGVzLFxuICByZXR1cm5Qcm9wZXJ0aWVzOiBzdHJpbmdbXSxcbiAgb3B0aW9uczogQXBpT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBjcmVhdGVRdWVyeShuYW1lLCBkYXRhVHlwZSwgcXVlcnlWYXJpYWJsZXMsIHJldHVyblByb3BlcnRpZXMpO1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgY29uc3QgcHVibGljVXJsOiBzdHJpbmcgPSBjb25maWcuYXBwPy5hcGk/LnB1YmxpYyB8fCAnJztcbiAgcmV0dXJuIGdldEdyYXBocWwoZmx1eCwgcHVibGljVXJsLCBmYWxzZSwgcXVlcnksIG9wdGlvbnMpIGFzIFByb21pc2U8VD47XG59O1xuXG5leHBvcnQgY29uc3QgcHVibGljTXV0YXRpb24gPSA8VD4oXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIG5hbWU6IHN0cmluZyxcbiAgZGF0YVR5cGU6IFJlYWt0b3JEYkNvbGxlY3Rpb24sXG4gIHF1ZXJ5VmFyaWFibGVzOiBBcGlRdWVyeVZhcmlhYmxlcyxcbiAgcmV0dXJuUHJvcGVydGllczogc3RyaW5nW10sXG4gIG9wdGlvbnM6IEFwaU9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUPiA9PiB7XG4gIGNvbnN0IHF1ZXJ5ID0gY3JlYXRlTXV0YXRpb24obmFtZSwgZGF0YVR5cGUsIHF1ZXJ5VmFyaWFibGVzLCByZXR1cm5Qcm9wZXJ0aWVzKTtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUZsdXgoZmx1eCk7XG4gIGNvbnN0IHB1YmxpY1VybDogc3RyaW5nID0gY29uZmlnLmFwcD8uYXBpPy5wdWJsaWMgfHwgJyc7XG4gIHJldHVybiBnZXRHcmFwaHFsKGZsdXgsIHB1YmxpY1VybCwgZmFsc2UsIHF1ZXJ5LCBvcHRpb25zKSBhcyBQcm9taXNlPFQ+O1xufTtcblxuZXhwb3J0IGNvbnN0IHVwbG9hZEltYWdlID0gKFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBpbWFnZSxcbiAgb3B0aW9uczogSHVudGVyT3B0aW9uc1R5cGUgPSB7fVxuKTogUHJvbWlzZTxBcGlSZXN1bHRzVHlwZT4gPT4ge1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgY29uc3QgdXBsb2FkSW1hZ2VVcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8udXBsb2FkSW1hZ2UgfHwgJyc7XG4gIGNvbnN0IHRva2VuID0gZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnRva2VuJyk7XG5cbiAgaWYoaXNFbXB0eSh1cGxvYWRJbWFnZVVybCkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEFwaUVycm9yKFsnaW52YWxpZF91cmwnXSwgJ3VwbG9hZF9lbmRwb2ludF9ub3RfY29uZmlndXJlZCcpKTtcbiAgfVxuXG4gIGlmKGlzRW1wdHkodG9rZW4pKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBBcGlFcnJvcihbJ2ludmFsaWRfc2Vzc2lvbiddLCAnbWlzc2luZ19hdXRoX3Rva2VuJykpO1xuICB9XG5cbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG4gIGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke3Rva2VufWApO1xuXG4gIGlmKHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgaW1hZ2UgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgIGhlYWRlcnMuc2V0KCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpO1xuXG4gICAgcmV0dXJuIGZldGNoKHVwbG9hZEltYWdlVXJsLCB7XG4gICAgICBib2R5OiBpbWFnZSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBtZXRob2Q6ICdQT1NUJ1xuICAgIH0pLnRoZW4oYXN5bmMgKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZVR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykgfHwgJyc7XG4gICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2VUeXBlLmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJylcbiAgICAgICAgPyBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICAgICAgOiBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG5cbiAgICAgIGlmKCFyZXNwb25zZS5vaykge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIGRhdGEgJiYgJ2Vycm9yJyBpbiBkYXRhXG4gICAgICAgICAgPyBTdHJpbmcoKGRhdGEgYXMge2Vycm9yPzogc3RyaW5nfSkuZXJyb3IgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dClcbiAgICAgICAgICA6IFN0cmluZyhkYXRhIHx8IHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuICAgICAgICB0aHJvdyBuZXcgQXBpRXJyb3IoWyd1cGxvYWRfZXJyb3InXSwgbWVzc2FnZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhIGFzIEFwaVJlc3VsdHNUeXBlO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHBvc3QodXBsb2FkSW1hZ2VVcmwsIGltYWdlLCB7aGVhZGVycywgLi4ub3B0aW9uc30pO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlZnJlc2hTZXNzaW9uID0gYXN5bmMgKFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICB0b2tlbj86IHN0cmluZyxcbiAgZXhwaXJlcz86IG51bWJlclxuKTogUHJvbWlzZTxGbHV4QWN0aW9uIHwgbnVsbD4gPT4ge1xuICBjb25zdCByZWZyZXNoVG9rZW4gPSBpc0VtcHR5KHRva2VuKSA/IGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbi50b2tlbicpIDogdG9rZW47XG5cbiAgaWYoaXNFbXB0eShyZWZyZXNoVG9rZW4pKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB0b2tlbkV4cGlyZXNBdCA9IHBhcnNlSnd0RXhwaXJ5TXMoU3RyaW5nKHJlZnJlc2hUb2tlbikpO1xuXG4gIGlmKHRva2VuRXhwaXJlc0F0ID4gMCAmJiBEYXRlLm5vdygpID49IHRva2VuRXhwaXJlc0F0KSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ2V4cGlyZWRfc2Vzc2lvbicpO1xuICAgIGF3YWl0IGNsZWFySW52YWxpZFNlc3Npb25TdGF0ZShmbHV4KTtcbiAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX1NFU1NJT05fRVJST1J9KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUZsdXgoZmx1eCk7XG4gICAgY29uc3QgcmVxdWVzdGVkRXhwaXJlcyA9IE1hdGgubWF4KFxuICAgICAgMSxcbiAgICAgIE51bWJlcihleHBpcmVzIHx8IGNvbmZpZy5hcHA/LnNlc3Npb24/Lm1heE1pbnV0ZXMgfHwgREVGQVVMVF9TRVNTSU9OX01BWF9NSU5VVEVTKVxuICAgICk7XG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBleHBpcmVzOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogcmVxdWVzdGVkRXhwaXJlc1xuICAgICAgfSxcbiAgICAgIHRva2VuOiB7XG4gICAgICAgIHR5cGU6ICdTdHJpbmchJyxcbiAgICAgICAgdmFsdWU6IHJlZnJlc2hUb2tlblxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb25TdWNjZXNzID0gYXN5bmMgKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pOiBQcm9taXNlPEZsdXhBY3Rpb24+ID0+IHtcbiAgICAgIGNvbnN0IHJhd1Nlc3Npb25EYXRhID0gKGRhdGEgYXMge3VzZXJzPzoge3JlZnJlc2hTZXNzaW9uPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj59fSk/LnVzZXJzPy5yZWZyZXNoU2Vzc2lvbjtcbiAgICAgIGNvbnN0IHNlc3Npb25EYXRhID0gcmF3U2Vzc2lvbkRhdGEgJiYgdHlwZW9mIHJhd1Nlc3Npb25EYXRhID09PSAnb2JqZWN0J1xuICAgICAgICA/IHJhd1Nlc3Npb25EYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgIDoge307XG4gICAgICBjb25zdCBjdXJyZW50U2Vzc2lvbiA9IChmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24nLCB7fSkgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgY29uc3QgbWVyZ2VkU2Vzc2lvbiA9IGF3YWl0IHN0b3JlU2Vzc2lvbihmbHV4LCB7Li4uY3VycmVudFNlc3Npb24sIC4uLnNlc3Npb25EYXRhfSk7XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7c2Vzc2lvbjogbWVyZ2VkU2Vzc2lvbiwgdHlwZTogVVNFUl9DT05TVEFOVFMuVVBEQVRFX1NFU1NJT05fU1VDQ0VTU30pO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXdhaXQgcHVibGljTXV0YXRpb24oZmx1eCwgJ3JlZnJlc2hTZXNzaW9uJywgJ3VzZXJzJywgcXVlcnlWYXJpYWJsZXMsIFsnZXhwaXJlcycsICdpc3N1ZWQnLCAndG9rZW4nXSwge1xuICAgICAgb25TdWNjZXNzXG4gICAgfSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICcnO1xuXG4gICAgaWYoZXJyb3JNZXNzYWdlID09PSAnaW52YWxpZF9zZXNzaW9uJyB8fCBlcnJvck1lc3NhZ2UgPT09ICdleHBpcmVkX3Nlc3Npb24nKSB7XG4gICAgICBhd2FpdCBjbGVhckludmFsaWRTZXNzaW9uU3RhdGUoZmx1eCk7XG4gICAgfVxuXG4gICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFVTRVJfQ09OU1RBTlRTLkdFVF9TRVNTSU9OX0VSUk9SfSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiQXBpRXJyb3IiLCJncmFwaHFsUXVlcnkiLCJwb3N0IiwiY2FtZWxDYXNlIiwiaXNFbXB0eSIsInVwcGVyRmlyc3QiLCJBUFBfQ09OU1RBTlRTIiwiVVNFUl9DT05TVEFOVFMiLCJnZXRDb25maWdGcm9tRmx1eCIsImNsZWFyUGVyc2lzdGVkU2Vzc2lvbiIsImdldFJlZnJlc2hXaW5kb3dNaW51dGVzIiwiaHlkcmF0ZVNlc3Npb25Gcm9tU3RvcmFnZSIsInBhcnNlSnd0RXhwaXJ5TXMiLCJzdG9yZVNlc3Npb24iLCJERUZBVUxUX1JFRlJFU0hfV0lORE9XX01JTlVURVMiLCJERUZBVUxUX1NFU1NJT05fTUFYX01JTlVURVMiLCJnZXRNaW51dGVzVW50aWwiLCJleHBpcmVzQXQiLCJNYXRoIiwicm91bmQiLCJEYXRlIiwibm93IiwiY2xlYXJJbnZhbGlkU2Vzc2lvblN0YXRlIiwiZmx1eCIsImNsZWFyQXBwRGF0YSIsImRpc3BhdGNoIiwic2Vzc2lvbiIsInR5cGUiLCJTSUdOX09VVF9TVUNDRVNTIiwiZ2V0R3JhcGhxbCIsInVybCIsImF1dGhlbnRpY2F0ZSIsInF1ZXJ5Iiwib3B0aW9ucyIsIm9uU3VjY2VzcyIsInJldHJ5IiwicmVzcG9uc2VNZXRob2QiLCJuZXR3b3JrVHlwZSIsImdldFN0YXRlIiwiQVBJX05FVFdPUktfRVJST1IiLCJzdGF0ZVNlc3Npb24iLCJ0b2tlbiIsImh5ZHJhdGVkU2Vzc2lvbiIsImV4cGlyZXMiLCJhdXRoRXhwaXJlcyIsImlzc3VlZCIsImF1dGhJc3N1ZWQiLCJoeWRyYXRlZFRva2VuIiwidG9rZW5FeHBpcmVzQXQiLCJjb25maWciLCJtaW51dGVzVW50aWxFeHBpcnkiLCJOdW1iZXIiLCJzZXNzaW9uTGlmZXRpbWVNaW51dGVzIiwicmVmcmVzaFdpbmRvd01pbnV0ZXMiLCJhcHAiLCJyZWZyZXNoRXhwaXJlc01pbnV0ZXMiLCJtYXgiLCJtYXhNaW51dGVzIiwidXBkYXRlZFNlc3Npb24iLCJyZWZyZXNoU2Vzc2lvbiIsIm5ld1Rva2VuIiwidGhlbiIsInJlc3VsdHMiLCJBUElfTkVUV09SS19TVUNDRVNTIiwiZGF0YSIsImNhdGNoIiwiZXJyb3IiLCJlcnJvcnMiLCJpbmNsdWRlcyIsIlByb21pc2UiLCJyZWplY3QiLCJyZXNvbHZlIiwibWVzc2FnZSIsIkVycm9yIiwiY3JlYXRlUXVlcnkiLCJuYW1lIiwiZGF0YVR5cGUiLCJ2YXJpYWJsZXMiLCJyZXR1cm5Qcm9wZXJ0aWVzIiwicXVlcnlWYXJpYWJsZXMiLCJ2YXJpYWJsZUtleXMiLCJPYmplY3QiLCJrZXlzIiwicXVlcnlOYW1lIiwicmVwbGFjZSIsIm11dGF0aW9uTmFtZSIsImxlbmd0aCIsIm1hcCIsImtleSIsImpvaW4iLCJ1cGRhdGVkVmFyaWFibGVzIiwicmVkdWNlIiwicXVlcnlEYXRhIiwidmFsdWUiLCJjcmVhdGVNdXRhdGlvbiIsImFwcFF1ZXJ5IiwiYXBwVXJsIiwiYXBpIiwiYXBwTXV0YXRpb24iLCJwdWJsaWNRdWVyeSIsInB1YmxpY1VybCIsInB1YmxpYyIsInB1YmxpY011dGF0aW9uIiwidXBsb2FkSW1hZ2UiLCJpbWFnZSIsInVwbG9hZEltYWdlVXJsIiwiaGVhZGVycyIsIkhlYWRlcnMiLCJzZXQiLCJGb3JtRGF0YSIsImZldGNoIiwiYm9keSIsIm1ldGhvZCIsInJlc3BvbnNlIiwicmVzcG9uc2VUeXBlIiwiZ2V0IiwianNvbiIsInRleHQiLCJvayIsIlN0cmluZyIsInN0YXR1c1RleHQiLCJyZWZyZXNoVG9rZW4iLCJHRVRfU0VTU0lPTl9FUlJPUiIsInJlcXVlc3RlZEV4cGlyZXMiLCJyYXdTZXNzaW9uRGF0YSIsInVzZXJzIiwic2Vzc2lvbkRhdGEiLCJjdXJyZW50U2Vzc2lvbiIsIm1lcmdlZFNlc3Npb24iLCJVUERBVEVfU0VTU0lPTl9TVUNDRVNTIiwiZXJyb3JNZXNzYWdlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxRQUFRLEVBQUVDLFlBQVksRUFBRUMsSUFBSSxRQUFPLG9CQUFvQjtBQUMvRCxTQUFRQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsVUFBVSxRQUFPLGVBQWU7QUFFNUQsU0FBUUMsYUFBYSxRQUFPLHdCQUF3QjtBQUNwRCxTQUFRQyxjQUFjLFFBQU8seUJBQXlCO0FBQ3RELFNBQVFDLGlCQUFpQixRQUFPLG1CQUFtQjtBQUNuRCxTQUFRQyxxQkFBcUIsRUFBRUMsdUJBQXVCLEVBQUVDLHlCQUF5QixFQUFFQyxnQkFBZ0IsRUFBRUMsWUFBWSxRQUFPLGVBQWU7QUEyRHZJLE1BQU1DLGlDQUFpQztBQUN2QyxNQUFNQyw4QkFBOEI7QUFFcEMsTUFBTUMsa0JBQWtCLENBQUNDLFlBQ3ZCQyxLQUFLQyxLQUFLLENBQUMsQUFBQ0YsQ0FBQUEsWUFBWUcsS0FBS0MsR0FBRyxFQUFDLElBQU0sQ0FBQSxPQUFPLEVBQUM7QUFFakQsTUFBTUMsMkJBQTJCLE9BQU9DO0lBQ3RDLE1BQU1kLHNCQUFzQmM7SUFDNUIsTUFBTUEsS0FBS0MsWUFBWTtJQUN2QixNQUFNRCxLQUFLRSxRQUFRLENBQUM7UUFBQ0MsU0FBUyxDQUFDO1FBQUdDLE1BQU1wQixlQUFlcUIsZ0JBQWdCO0lBQUE7QUFDekU7QUFFQSxPQUFPLE1BQU1DLGFBQWEsT0FDeEJOLE1BQ0FPLEtBQ0FDLGNBQ0FDLE9BQ0FDO0lBRUEsSUFBSTtRQUNGLE1BQU0sRUFBQ0MsU0FBUyxFQUFDLEdBQUdEO1FBQ3BCLE1BQU1FLFFBQW1CO1lBQUNIO1lBQU9JLGdCQUFnQkYsYUFBYyxDQUFBLEtBQU8sQ0FBQTtRQUFFO1FBQ3hFLE1BQU1HLGNBQXNCZCxLQUFLZSxRQUFRLENBQUM7UUFFMUMsSUFBR0QsZ0JBQWdCLFFBQVE7WUFDekIsT0FBT2QsS0FBS0UsUUFBUSxDQUFDO2dCQUFDVTtnQkFBT1IsTUFBTXJCLGNBQWNpQyxpQkFBaUI7WUFBQTtRQUNwRTtRQUVBLE1BQU1DLGVBQTZCakIsS0FBS2UsUUFBUSxDQUFDLG1CQUFtQixDQUFDO1FBQ3JFLElBQUlHO1FBRUosSUFBR1YsY0FBYztZQUNmLE1BQU1XLGtCQUErQkYsYUFBYUMsS0FBSyxHQUFHRCxlQUFlLE1BQU03QiwwQkFBMEJZO1lBQ3pHLE1BQU0sRUFDSm9CLFNBQVNDLGNBQWMsQ0FBQyxFQUN4QkMsUUFBUUMsYUFBYSxDQUFDLEVBQ3RCTCxPQUFPTSxhQUFhLEVBQ3JCLEdBQWdCTCxtQkFBbUIsQ0FBQztZQUNyQ0QsUUFBUU0saUJBQWlCUCxhQUFhQyxLQUFLO1lBRTNDLElBQUcsQ0FBQ0EsT0FBTztnQkFDVCxNQUFNLElBQUl6QyxTQUFTO29CQUFDO2lCQUFrQixFQUFFO1lBQzFDO1lBRUEsTUFBTWdELGlCQUFpQnBDLGlCQUFpQjZCO1lBRXhDLElBQUdPLGlCQUFpQixLQUFLNUIsS0FBS0MsR0FBRyxNQUFNMkIsZ0JBQWdCO2dCQUNyRCxNQUFNLElBQUloRCxTQUFTO29CQUFDO2lCQUFrQixFQUFFO1lBQzFDO1lBRUEsTUFBTWlELFNBQVN6QyxrQkFBa0JlO1lBQ2pDLE1BQU0yQixxQkFBcUJsQyxnQkFBZ0JtQyxPQUFPUCxlQUFlO1lBQ2pFLE1BQU1RLHlCQUF5QmxDLEtBQUtDLEtBQUssQ0FBQyxBQUFDeUIsQ0FBQUEsY0FBY0UsVUFBUyxJQUFNLENBQUEsT0FBTyxFQUFDO1lBQ2hGLE1BQU1PLHVCQUF1QjNDLHdCQUMzQjBDLDBCQUEwQnJDLDZCQUMxQmtDLE9BQU9LLEdBQUcsRUFBRTVCLFdBQVcsQ0FBQztZQUUxQixNQUFNNkIsd0JBQXdCckMsS0FBS3NDLEdBQUcsQ0FDcEMsR0FDQUwsT0FBT0YsT0FBT0ssR0FBRyxFQUFFNUIsU0FBUytCLGNBQWNMLDBCQUEwQnJDO1lBR3RFLElBQUdtQyxxQkFBcUIsS0FBS0Esc0JBQXNCRyxzQkFBc0I7Z0JBQ3ZFLE1BQU0sRUFDSjNCLFNBQVNnQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQzdCLEdBQW1CLEFBQUMsTUFBTUMsZUFBZXBDLE1BQU1rQixPQUFPYywwQkFBMkIsQ0FBQztnQkFDbkYsTUFBTSxFQUFDZCxPQUFPbUIsUUFBUSxFQUFDLEdBQWlCRixrQkFBa0IsQ0FBQztnQkFFM0QsSUFBRyxDQUFDRSxVQUFVO29CQUNaLE1BQU0sSUFBSTVELFNBQVM7d0JBQUM7cUJBQWtCLEVBQUU7Z0JBQzFDO2dCQUVBeUMsUUFBUW1CO1lBQ1Y7UUFDRjtRQUVBLE9BQU8zRCxhQUFhNkIsS0FBS0UsT0FBTztZQUFDUyxPQUFPQSxTQUFTO1FBQUUsR0FDaERvQixJQUFJLENBQUMsT0FBT0M7WUFDWCxNQUFNdkMsS0FBS0UsUUFBUSxDQUFDO2dCQUFDRSxNQUFNckIsY0FBY3lELG1CQUFtQjtZQUFBO1lBRTVELE9BQU9EO1FBQ1QsR0FDQ0QsSUFBSSxDQUFDLENBQUNHLE9BQVU5QixZQUFZQSxVQUFVOEIsUUFBUUEsTUFDOUNDLEtBQUssQ0FBQyxPQUFPQztZQUNaLE1BQU0sRUFBQ0MsU0FBUyxFQUFFLEVBQUMsR0FBR0Q7WUFFdEIsSUFBR2hDLGFBQWFpQyxPQUFPQyxRQUFRLENBQUMsa0JBQWtCO2dCQUNoRCxNQUFNN0MsS0FBS0UsUUFBUSxDQUFDO29CQUFDVTtvQkFBT1IsTUFBTXJCLGNBQWNpQyxpQkFBaUI7Z0JBQUE7Z0JBQ2pFLE9BQU84QixRQUFRQyxNQUFNLENBQUNKO1lBQ3hCLE9BQU8sSUFBR0MsT0FBT0MsUUFBUSxDQUFDLHNCQUFzQkQsT0FBT0MsUUFBUSxDQUFDLG9CQUFvQjtnQkFDbEYsTUFBTTlDLHlCQUF5QkM7Z0JBQy9CLE9BQU84QyxRQUFRRSxPQUFPLENBQUMsQ0FBQztZQUMxQjtZQUVBLE9BQU9GLFFBQVFDLE1BQU0sQ0FBQ0o7UUFDeEI7SUFDSixFQUFFLE9BQU1BLE9BQU87UUFDYixNQUFNQyxTQUFTRCxpQkFBaUJsRSxXQUFXa0UsTUFBTUMsTUFBTSxHQUFHLEVBQUU7UUFDNUQsTUFBTUssVUFBVU4saUJBQWlCTyxRQUFRUCxNQUFNTSxPQUFPLEdBQUc7UUFFekQsSUFBR0wsT0FBT0MsUUFBUSxDQUFDLHNCQUFzQkQsT0FBT0MsUUFBUSxDQUFDLHNCQUFzQkksWUFBWSxxQkFBcUJBLFlBQVksbUJBQW1CO1lBQzdJLE1BQU1sRCx5QkFBeUJDO1lBQy9CLE9BQU8sQ0FBQztRQUNWO1FBRUEsTUFBTTJDO0lBQ1I7QUFDRixFQUFFO0FBRUYsT0FBTyxNQUFNUSxjQUFjLENBQ3pCQyxNQUNBQyxVQUNBQyxZQUErQixDQUFDLENBQUMsRUFDakNDLG1CQUE2QixFQUFFLEVBQy9CbkQsT0FBTyxPQUFPO0lBRWQsTUFBTW9ELGlCQUFpQjtRQUFDLEdBQUdGLGFBQWEsQ0FBQyxDQUFDO0lBQUE7SUFDMUMsTUFBTUcsZUFBZUMsT0FBT0MsSUFBSSxDQUFDSDtJQUNqQyxNQUFNSSxZQUFZUixLQUFLUyxPQUFPLENBQUMsTUFBTTtJQUNyQyxJQUFJcEQ7SUFFSixJQUFHTCxTQUFTLFlBQVk7UUFDdEIsTUFBTTBELGVBQWVoRixXQUFXRixVQUFVeUUsYUFBYXZFLFdBQVdGLFVBQVVnRjtRQUM1RW5ELFFBQVEsR0FBR0wsS0FBSyxDQUFDLEVBQUUwRCxlQUNqQkwsYUFBYU0sTUFBTSxHQUNmLENBQUMsQ0FBQyxFQUFFTixhQUFhTyxHQUFHLENBQUMsQ0FBQ0MsTUFBUSxDQUFDLENBQUMsRUFBRUEsSUFBSSxFQUFFLEVBQUVULGNBQWMsQ0FBQ1MsSUFBSSxDQUFDN0QsSUFBSSxFQUFFLEVBQUU4RCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FDbkYsR0FDTDtNQUNDLEVBQUViLFNBQVM7UUFDVCxFQUFFekUsVUFBVWdGLGFBQ1ZILGFBQWFNLE1BQU0sR0FDZixDQUFDLENBQUMsRUFBRU4sYUFBYU8sR0FBRyxDQUFDLENBQUNDLE1BQVEsR0FBR0EsSUFBSSxHQUFHLEVBQUVBLEtBQUssRUFBRUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQzlELEdBQ0w7UUFDRCxFQUFFWCxrQkFBa0JRLFNBQVMsQ0FBQyxDQUFDLEVBQUVSLGlCQUFpQlcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRzs7S0FFeEUsQ0FBQztJQUNKLE9BQU87UUFDTHpELFFBQVEsR0FBR0wsS0FBSyxDQUFDLEVBQUV3RCxZQUNqQkgsYUFBYU0sTUFBTSxHQUNmLENBQUMsQ0FBQyxFQUFFTixhQUFhTyxHQUFHLENBQUMsQ0FBQ0MsTUFBUSxDQUFDLENBQUMsRUFBRUEsSUFBSSxFQUFFLEVBQUVULGNBQWMsQ0FBQ1MsSUFBSSxDQUFDN0QsSUFBSSxFQUFFLEVBQUU4RCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FDbkYsR0FDTDtNQUNDLEVBQUViLFNBQVM7UUFDVCxFQUFFekUsVUFBVWdGLGFBQ1ZILGFBQWFNLE1BQU0sR0FDZixDQUFDLENBQUMsRUFBRU4sYUFBYU8sR0FBRyxDQUFDLENBQUNDLE1BQVEsR0FBR0EsSUFBSSxHQUFHLEVBQUVBLEtBQUssRUFBRUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQzlELEdBQ0w7UUFDRCxFQUFFWCxrQkFBa0JRLFNBQVMsQ0FBQyxDQUFDLEVBQUVSLGlCQUFpQlcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRzs7S0FFeEUsQ0FBQztJQUNKO0lBRUEsTUFBTUMsbUJBQTRDVixhQUFhVyxNQUFNLENBQUMsQ0FBQ0MsV0FBV0o7UUFDaEZJLFNBQVMsQ0FBQ0osSUFBSSxHQUFHVCxjQUFjLENBQUNTLElBQUksQ0FBQ0ssS0FBSztRQUMxQyxPQUFPRDtJQUNULEdBQUcsQ0FBQztJQUVKLE9BQU87UUFBQzVEO1FBQU82QyxXQUFXYTtJQUFnQjtBQUM1QyxFQUFFO0FBRUYsT0FBTyxNQUFNSSxpQkFBaUIsQ0FDNUJuQixNQUNBQyxVQUNBQyxZQUErQixDQUFDLENBQUMsRUFDakNDLG1CQUE2QixFQUFFLEdBQzVCSixZQUFZQyxNQUFNQyxVQUFVQyxXQUFXQyxrQkFBa0IsWUFBWTtBQUUxRSxPQUFPLE1BQU1pQixXQUFXLENBQ3RCeEUsTUFDQW9ELE1BQ0FDLFVBQ0FHLGdCQUNBRCxrQkFDQTdDLFVBQXNCLENBQUMsQ0FBQztJQUV4QixNQUFNRCxRQUFRMEMsWUFBWUMsTUFBTUMsVUFBVUcsZ0JBQWdCRDtJQUMxRCxNQUFNN0IsU0FBU3pDLGtCQUFrQmU7SUFDakMsTUFBTXlFLFNBQWlCL0MsT0FBT0ssR0FBRyxFQUFFMkMsS0FBS25FLE9BQU87SUFDL0MsT0FBT0QsV0FBV04sTUFBTXlFLFFBQVEsTUFBTWhFLE9BQU9DO0FBQy9DLEVBQUU7QUFFRixPQUFPLE1BQU1pRSxjQUFjLENBQ3pCM0UsTUFDQW9ELE1BQ0FDLFVBQ0FHLGdCQUNBRCxrQkFDQTdDLFVBQXNCLENBQUMsQ0FBQztJQUV4QixNQUFNRCxRQUFROEQsZUFBZW5CLE1BQU1DLFVBQVVHLGdCQUFnQkQ7SUFDN0QsTUFBTTdCLFNBQVN6QyxrQkFBa0JlO0lBQ2pDLE1BQU15RSxTQUFpQi9DLE9BQU9LLEdBQUcsRUFBRTJDLEtBQUtuRSxPQUFPO0lBQy9DLE9BQU9ELFdBQVdOLE1BQU15RSxRQUFRLE1BQU1oRSxPQUFPQztBQUMvQyxFQUFFO0FBRUYsT0FBTyxNQUFNa0UsY0FBYyxDQUN6QjVFLE1BQ0FvRCxNQUNBQyxVQUNBRyxnQkFDQUQsa0JBQ0E3QyxVQUFzQixDQUFDLENBQUM7SUFFeEIsTUFBTUQsUUFBUTBDLFlBQVlDLE1BQU1DLFVBQVVHLGdCQUFnQkQ7SUFDMUQsTUFBTTdCLFNBQVN6QyxrQkFBa0JlO0lBQ2pDLE1BQU02RSxZQUFvQm5ELE9BQU9LLEdBQUcsRUFBRTJDLEtBQUtJLFVBQVU7SUFDckQsT0FBT3hFLFdBQVdOLE1BQU02RSxXQUFXLE9BQU9wRSxPQUFPQztBQUNuRCxFQUFFO0FBRUYsT0FBTyxNQUFNcUUsaUJBQWlCLENBQzVCL0UsTUFDQW9ELE1BQ0FDLFVBQ0FHLGdCQUNBRCxrQkFDQTdDLFVBQXNCLENBQUMsQ0FBQztJQUV4QixNQUFNRCxRQUFROEQsZUFBZW5CLE1BQU1DLFVBQVVHLGdCQUFnQkQ7SUFDN0QsTUFBTTdCLFNBQVN6QyxrQkFBa0JlO0lBQ2pDLE1BQU02RSxZQUFvQm5ELE9BQU9LLEdBQUcsRUFBRTJDLEtBQUtJLFVBQVU7SUFDckQsT0FBT3hFLFdBQVdOLE1BQU02RSxXQUFXLE9BQU9wRSxPQUFPQztBQUNuRCxFQUFFO0FBRUYsT0FBTyxNQUFNc0UsY0FBYyxDQUN6QmhGLE1BQ0FpRixPQUNBdkUsVUFBNkIsQ0FBQyxDQUFDO0lBRS9CLE1BQU1nQixTQUFTekMsa0JBQWtCZTtJQUNqQyxNQUFNa0YsaUJBQXlCeEQsT0FBT0ssR0FBRyxFQUFFMkMsS0FBS00sZUFBZTtJQUMvRCxNQUFNOUQsUUFBUWxCLEtBQUtlLFFBQVEsQ0FBQztJQUU1QixJQUFHbEMsUUFBUXFHLGlCQUFpQjtRQUMxQixPQUFPcEMsUUFBUUMsTUFBTSxDQUFDLElBQUl0RSxTQUFTO1lBQUM7U0FBYyxFQUFFO0lBQ3REO0lBRUEsSUFBR0ksUUFBUXFDLFFBQVE7UUFDakIsT0FBTzRCLFFBQVFDLE1BQU0sQ0FBQyxJQUFJdEUsU0FBUztZQUFDO1NBQWtCLEVBQUU7SUFDMUQ7SUFFQSxNQUFNMEcsVUFBVSxJQUFJQztJQUNwQkQsUUFBUUUsR0FBRyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRW5FLE9BQU87SUFFOUMsSUFBRyxPQUFPb0UsYUFBYSxlQUFlTCxpQkFBaUJLLFVBQVU7UUFDL0RILFFBQVFFLEdBQUcsQ0FBQyxVQUFVO1FBRXRCLE9BQU9FLE1BQU1MLGdCQUFnQjtZQUMzQk0sTUFBTVA7WUFDTkU7WUFDQU0sUUFBUTtRQUNWLEdBQUduRCxJQUFJLENBQUMsT0FBT29EO1lBQ2IsTUFBTUMsZUFBZUQsU0FBU1AsT0FBTyxDQUFDUyxHQUFHLENBQUMsbUJBQW1CO1lBQzdELE1BQU1uRCxPQUFPa0QsYUFBYTlDLFFBQVEsQ0FBQyxzQkFDL0IsTUFBTTZDLFNBQVNHLElBQUksS0FDbkIsTUFBTUgsU0FBU0ksSUFBSTtZQUV2QixJQUFHLENBQUNKLFNBQVNLLEVBQUUsRUFBRTtnQkFDZixNQUFNOUMsVUFBVSxPQUFPUixTQUFTLFlBQVlBLFFBQVEsV0FBV0EsT0FDM0R1RCxPQUFPLEFBQUN2RCxLQUEwQkUsS0FBSyxJQUFJK0MsU0FBU08sVUFBVSxJQUM5REQsT0FBT3ZELFFBQVFpRCxTQUFTTyxVQUFVO2dCQUN0QyxNQUFNLElBQUl4SCxTQUFTO29CQUFDO2lCQUFlLEVBQUV3RTtZQUN2QztZQUVBLE9BQU9SO1FBQ1Q7SUFDRjtJQUVBLE9BQU85RCxLQUFLdUcsZ0JBQWdCRCxPQUFPO1FBQUNFO1FBQVMsR0FBR3pFLE9BQU87SUFBQTtBQUN6RCxFQUFFO0FBRUYsT0FBTyxNQUFNMEIsaUJBQWlCLE9BQzVCcEMsTUFDQWtCLE9BQ0FFO0lBRUEsTUFBTThFLGVBQWVySCxRQUFRcUMsU0FBU2xCLEtBQUtlLFFBQVEsQ0FBQyx3QkFBd0JHO0lBRTVFLElBQUdyQyxRQUFRcUgsZUFBZTtRQUN4QixPQUFPO0lBQ1Q7SUFFQSxNQUFNekUsaUJBQWlCcEMsaUJBQWlCMkcsT0FBT0U7SUFFL0MsSUFBR3pFLGlCQUFpQixLQUFLNUIsS0FBS0MsR0FBRyxNQUFNMkIsZ0JBQWdCO1FBQ3JELE1BQU1rQixRQUFRLElBQUlPLE1BQU07UUFDeEIsTUFBTW5ELHlCQUF5QkM7UUFDL0JBLEtBQUtFLFFBQVEsQ0FBQztZQUFDeUM7WUFBT3ZDLE1BQU1wQixlQUFlbUgsaUJBQWlCO1FBQUE7UUFDNUQsT0FBTztJQUNUO0lBRUEsSUFBSTtRQUNGLE1BQU16RSxTQUFTekMsa0JBQWtCZTtRQUNqQyxNQUFNb0csbUJBQW1CekcsS0FBS3NDLEdBQUcsQ0FDL0IsR0FDQUwsT0FBT1IsV0FBV00sT0FBT0ssR0FBRyxFQUFFNUIsU0FBUytCLGNBQWMxQztRQUV2RCxNQUFNZ0UsaUJBQWlCO1lBQ3JCcEMsU0FBUztnQkFDUGhCLE1BQU07Z0JBQ05rRSxPQUFPOEI7WUFDVDtZQUNBbEYsT0FBTztnQkFDTGQsTUFBTTtnQkFDTmtFLE9BQU80QjtZQUNUO1FBQ0Y7UUFDQSxNQUFNdkYsWUFBWSxPQUFPOEIsT0FBdUIsQ0FBQyxDQUFDO1lBQ2hELE1BQU00RCxpQkFBa0I1RCxNQUErRDZELE9BQU9sRTtZQUM5RixNQUFNbUUsY0FBY0Ysa0JBQWtCLE9BQU9BLG1CQUFtQixXQUM1REEsaUJBQ0EsQ0FBQztZQUNMLE1BQU1HLGlCQUFrQnhHLEtBQUtlLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7WUFDOUQsTUFBTTBGLGdCQUFnQixNQUFNbkgsYUFBYVUsTUFBTTtnQkFBQyxHQUFHd0csY0FBYztnQkFBRSxHQUFHRCxXQUFXO1lBQUE7WUFDakYsT0FBT3ZHLEtBQUtFLFFBQVEsQ0FBQztnQkFBQ0MsU0FBU3NHO2dCQUFlckcsTUFBTXBCLGVBQWUwSCxzQkFBc0I7WUFBQTtRQUMzRjtRQUVBLE9BQU8sTUFBTTNCLGVBQWUvRSxNQUFNLGtCQUFrQixTQUFTd0QsZ0JBQWdCO1lBQUM7WUFBVztZQUFVO1NBQVEsRUFBRTtZQUMzRzdDO1FBQ0Y7SUFDRixFQUFFLE9BQU1nQyxPQUFPO1FBQ2IsTUFBTWdFLGVBQWVoRSxpQkFBaUJPLFFBQVFQLE1BQU1NLE9BQU8sR0FBRztRQUU5RCxJQUFHMEQsaUJBQWlCLHFCQUFxQkEsaUJBQWlCLG1CQUFtQjtZQUMzRSxNQUFNNUcseUJBQXlCQztRQUNqQztRQUVBQSxLQUFLRSxRQUFRLENBQUM7WUFBQ3lDO1lBQU92QyxNQUFNcEIsZUFBZW1ILGlCQUFpQjtRQUFBO1FBQzVELE9BQU87SUFDVDtBQUNGLEVBQUUifQ==
341
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvYXBpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBpRXJyb3IsIGFqYXgsIGRlbCwgZ2V0LCBncmFwaHFsUXVlcnksIHBvc3QsIHB1dH0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuaW1wb3J0IHtjYW1lbENhc2UsIGlzRW1wdHksIHVwcGVyRmlyc3R9IGZyb20gJ0BubGFicy91dGlscyc7XG5cbmltcG9ydCB7QVBQX0NPTlNUQU5UU30gZnJvbSAnLi4vc3RvcmVzL2FwcFN0b3JlLmpzJztcbmltcG9ydCB7VVNFUl9DT05TVEFOVFN9IGZyb20gJy4uL3N0b3Jlcy91c2VyU3RvcmUuanMnO1xuaW1wb3J0IHtnZXRDb25maWdGcm9tRmx1eH0gZnJvbSAnLi9jb25maWdVdGlscy5qcyc7XG5pbXBvcnQge2NsZWFyUGVyc2lzdGVkU2Vzc2lvbiwgZ2V0UmVmcmVzaFdpbmRvd01pbnV0ZXMsIGh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UsIHBhcnNlSnd0RXhwaXJ5TXMsIHN0b3JlU2Vzc2lvbn0gZnJvbSAnLi9zZXNzaW9uLmpzJztcblxuaW1wb3J0IHR5cGUge0ZsdXhBY3Rpb24sIEZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5pbXBvcnQgdHlwZSB7SHVudGVyT3B0aW9uc1R5cGUsIEh1bnRlclF1ZXJ5VHlwZX0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwaU9wdGlvbnMge1xuICByZWFkb25seSBvblN1Y2Nlc3M/OiAoZGF0YTogYW55KSA9PiBQcm9taXNlPEZsdXhBY3Rpb24+O1xuICByZWFkb25seSB2YXJpYWJsZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZXhwb3J0IHR5cGUgUmVzdE1ldGhvZCA9ICdERUxFVEUnIHwgJ0dFVCcgfCAnUEFUQ0gnIHwgJ1BPU1QnIHwgJ1BVVCcgfCAoc3RyaW5nICYge30pO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RBcGlPcHRpb25zIGV4dGVuZHMgSHVudGVyT3B0aW9uc1R5cGUge1xuICByZWFkb25seSBhdXRoZW50aWNhdGU/OiBib29sZWFuO1xuICByZWFkb25seSBvblN1Y2Nlc3M/OiAoZGF0YTogYW55KSA9PiBhbnk7XG59XG5cbmV4cG9ydCB0eXBlIFJlYWt0b3JEYkNvbGxlY3Rpb24gPVxuICAnYXBwcycgfFxuICAnY29ubmVjdGlvbnMnIHxcbiAgJ2NvbnRlbnRzJyB8XG4gICdjb252ZXJzYXRpb25zJyB8XG4gICdjcm0nIHxcbiAgJ2V2ZW50cycgfFxuICAnZmlsZXMnIHxcbiAgJ2dyb3VwcycgfFxuICAnaW1hZ2VzJyB8XG4gICdsb2NhdGlvbnMnIHxcbiAgJ21lc3NhZ2VzJyB8XG4gICdub3RpZmljYXRpb25zJyB8XG4gICdwYXltZW50cycgfFxuICAncGVybWlzc2lvbnMnIHxcbiAgJ3Bvc3RzJyB8XG4gICdwZXJzb25hcycgfFxuICAncmVhY3Rpb25zJyB8XG4gICdydW0nIHxcbiAgJ3N1YnNjcmlwdGlvbnMnIHxcbiAgJ3RhZ3MnIHxcbiAgJ3RyYW5zbGF0aW9ucycgfFxuICAndXNlcnMnIHxcbiAgJ3ZpZGVvcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpUXVlcnlWYXJpYWJsZVR5cGUge1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhbHVlOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwaVF1ZXJ5VmFyaWFibGVzIHtcbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogQXBpUXVlcnlWYXJpYWJsZVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpUmVzdWx0c1R5cGUge1xuICByZWFkb25seSBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5VHlwZSB7XG4gIHJlYWRvbmx5IHF1ZXJ5PzogSHVudGVyUXVlcnlUeXBlIHwgSHVudGVyUXVlcnlUeXBlW107XG4gIHJlYWRvbmx5IHJlcXVlc3Q/OiB7XG4gICAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcGFyYW1zPzogdW5rbm93bjtcbiAgICByZWFkb25seSB1cmw6IHN0cmluZztcbiAgfTtcbiAgcmVhZG9ubHkgcmVzcG9uc2VNZXRob2Q6IChyZXN1bHRzOiBBcGlSZXN1bHRzVHlwZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uVHlwZSB7XG4gIHJlYWRvbmx5IGV4cGlyZXM/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGlzc3VlZD86IG51bWJlcjtcbiAgcmVhZG9ubHkgdG9rZW4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVzZXJJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgdXNlcm5hbWU/OiBzdHJpbmc7XG59XG5cbmNvbnN0IERFRkFVTFRfUkVGUkVTSF9XSU5ET1dfTUlOVVRFUyA9IDU7XG5jb25zdCBERUZBVUxUX1NFU1NJT05fTUFYX01JTlVURVMgPSAxNTtcblxuY29uc3QgZ2V0TWludXRlc1VudGlsID0gKGV4cGlyZXNBdDogbnVtYmVyKTogbnVtYmVyID0+XG4gIE1hdGgucm91bmQoKGV4cGlyZXNBdCAtIERhdGUubm93KCkpIC8gKDEwMDAgKiA2MCkpO1xuXG5jb25zdCBjbGVhckludmFsaWRTZXNzaW9uU3RhdGUgPSBhc3luYyAoZmx1eDogRmx1eEZyYW1ld29yayk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBhd2FpdCBjbGVhclBlcnNpc3RlZFNlc3Npb24oZmx1eCk7XG4gIGF3YWl0IGZsdXguY2xlYXJBcHBEYXRhKCk7XG4gIGF3YWl0IGZsdXguZGlzcGF0Y2goe3Nlc3Npb246IHt9LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5TSUdOX09VVF9TVUNDRVNTfSk7XG59O1xuXG5jb25zdCByZXNvbHZlQXV0aFRva2VuID0gYXN5bmMgKGZsdXg6IEZsdXhGcmFtZXdvcmspOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBzdGF0ZVNlc3Npb246IFNlc3Npb25UeXBlID0gKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicpIHx8IHt9KSBhcyBTZXNzaW9uVHlwZTtcbiAgY29uc3QgaHlkcmF0ZWRTZXNzaW9uOiBTZXNzaW9uVHlwZSA9IHN0YXRlU2Vzc2lvbi50b2tlbiA/IHN0YXRlU2Vzc2lvbiA6IGF3YWl0IGh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UoZmx1eCk7XG4gIGNvbnN0IHtcbiAgICBleHBpcmVzOiBhdXRoRXhwaXJlcyA9IDAsXG4gICAgaXNzdWVkOiBhdXRoSXNzdWVkID0gMCxcbiAgICB0b2tlbjogaHlkcmF0ZWRUb2tlblxuICB9OiBTZXNzaW9uVHlwZSA9IGh5ZHJhdGVkU2Vzc2lvbiB8fCB7fTtcbiAgbGV0IHRva2VuID0gaHlkcmF0ZWRUb2tlbiB8fCBzdGF0ZVNlc3Npb24udG9rZW47XG5cbiAgaWYoIXRva2VuKSB7XG4gICAgdGhyb3cgbmV3IEFwaUVycm9yKFsnaW52YWxpZF9zZXNzaW9uJ10sICdpbnZhbGlkX3Nlc3Npb24nKTtcbiAgfVxuXG4gIGNvbnN0IHRva2VuRXhwaXJlc0F0ID0gcGFyc2VKd3RFeHBpcnlNcyh0b2tlbik7XG5cbiAgaWYodG9rZW5FeHBpcmVzQXQgPiAwICYmIERhdGUubm93KCkgPj0gdG9rZW5FeHBpcmVzQXQpIHtcbiAgICB0aHJvdyBuZXcgQXBpRXJyb3IoWydleHBpcmVkX3Nlc3Npb24nXSwgJ2V4cGlyZWRfc2Vzc2lvbicpO1xuICB9XG5cbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUZsdXgoZmx1eCk7XG4gIGNvbnN0IG1pbnV0ZXNVbnRpbEV4cGlyeSA9IGdldE1pbnV0ZXNVbnRpbChOdW1iZXIoYXV0aEV4cGlyZXMgfHwgMCkpO1xuICBjb25zdCBzZXNzaW9uTGlmZXRpbWVNaW51dGVzID0gTWF0aC5yb3VuZCgoYXV0aEV4cGlyZXMgLSBhdXRoSXNzdWVkKSAvICgxMDAwICogNjApKTtcbiAgY29uc3QgcmVmcmVzaFdpbmRvd01pbnV0ZXMgPSBnZXRSZWZyZXNoV2luZG93TWludXRlcyhcbiAgICBzZXNzaW9uTGlmZXRpbWVNaW51dGVzIHx8IERFRkFVTFRfU0VTU0lPTl9NQVhfTUlOVVRFUyxcbiAgICBjb25maWcuYXBwPy5zZXNzaW9uIHx8IHt9XG4gICk7XG4gIGNvbnN0IHJlZnJlc2hFeHBpcmVzTWludXRlcyA9IE1hdGgubWF4KFxuICAgIDEsXG4gICAgTnVtYmVyKGNvbmZpZy5hcHA/LnNlc3Npb24/Lm1heE1pbnV0ZXMgfHwgc2Vzc2lvbkxpZmV0aW1lTWludXRlcyB8fCBERUZBVUxUX1NFU1NJT05fTUFYX01JTlVURVMpXG4gICk7XG5cbiAgaWYobWludXRlc1VudGlsRXhwaXJ5ID4gMCAmJiBtaW51dGVzVW50aWxFeHBpcnkgPD0gcmVmcmVzaFdpbmRvd01pbnV0ZXMpIHtcbiAgICBjb25zdCB7XG4gICAgICBzZXNzaW9uOiB1cGRhdGVkU2Vzc2lvbiA9IHt9XG4gICAgfTogQXBpUmVzdWx0c1R5cGUgPSAoYXdhaXQgcmVmcmVzaFNlc3Npb24oZmx1eCwgdG9rZW4sIHJlZnJlc2hFeHBpcmVzTWludXRlcykpIHx8IHt9O1xuICAgIGNvbnN0IHt0b2tlbjogbmV3VG9rZW59OiBTZXNzaW9uVHlwZSA9ICh1cGRhdGVkU2Vzc2lvbiB8fCB7fSk7XG5cbiAgICBpZighbmV3VG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBBcGlFcnJvcihbJ2ludmFsaWRfc2Vzc2lvbiddLCAnaW52YWxpZF9zZXNzaW9uJyk7XG4gICAgfVxuXG4gICAgdG9rZW4gPSBuZXdUb2tlbjtcbiAgfVxuXG4gIHJldHVybiB0b2tlbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcmFwaHFsID0gYXN5bmMgKFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICB1cmw6IHN0cmluZyxcbiAgYXV0aGVudGljYXRlOiBib29sZWFuLFxuICBxdWVyeTogSHVudGVyUXVlcnlUeXBlIHwgSHVudGVyUXVlcnlUeXBlW10sXG4gIG9wdGlvbnM6IEFwaU9wdGlvbnNcbik6IFByb21pc2U8QXBpUmVzdWx0c1R5cGU+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7b25TdWNjZXNzfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgcmV0cnk6IFJldHJ5VHlwZSA9IHtxdWVyeSwgcmVzcG9uc2VNZXRob2Q6IG9uU3VjY2VzcyB8fCAoKCkgPT4ge30pfTtcbiAgICBjb25zdCBuZXR3b3JrVHlwZTogc3RyaW5nID0gZmx1eC5nZXRTdGF0ZSgnYXBwLm5ldHdvcmtUeXBlJykgYXMgc3RyaW5nO1xuXG4gICAgaWYobmV0d29ya1R5cGUgPT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe3JldHJ5LCB0eXBlOiBBUFBfQ09OU1RBTlRTLkFQSV9ORVRXT1JLX0VSUk9SfSk7XG4gICAgfVxuXG4gICAgbGV0IHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBpZihhdXRoZW50aWNhdGUpIHtcbiAgICAgIHRva2VuID0gYXdhaXQgcmVzb2x2ZUF1dGhUb2tlbihmbHV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JhcGhxbFF1ZXJ5KHVybCwgcXVlcnksIHt0b2tlbjogdG9rZW4gfHwgJyd9KVxuICAgICAgLnRoZW4oYXN5bmMgKHJlc3VsdHMpID0+IHtcbiAgICAgICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7dHlwZTogQVBQX0NPTlNUQU5UUy5BUElfTkVUV09SS19TVUNDRVNTfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKGRhdGEpID0+IChvblN1Y2Nlc3MgPyBvblN1Y2Nlc3MoZGF0YSkgOiBkYXRhKSlcbiAgICAgIC5jYXRjaChhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3Qge2Vycm9ycyA9IFtdfSA9IGVycm9yO1xuXG4gICAgICAgIGlmKG9uU3VjY2VzcyAmJiBlcnJvcnMuaW5jbHVkZXMoJ25ldHdvcmtfZXJyb3InKSkge1xuICAgICAgICAgIGF3YWl0IGZsdXguZGlzcGF0Y2goe3JldHJ5LCB0eXBlOiBBUFBfQ09OU1RBTlRTLkFQSV9ORVRXT1JLX0VSUk9SfSk7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSBlbHNlIGlmKGVycm9ycy5pbmNsdWRlcygnaW52YWxpZF9zZXNzaW9uJykgfHwgZXJyb3JzLmluY2x1ZGVzKCdleHBpcmVkX3Nlc3Npb24nKSkge1xuICAgICAgICAgIGF3YWl0IGNsZWFySW52YWxpZFNlc3Npb25TdGF0ZShmbHV4KTtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGNvbnN0IGVycm9ycyA9IGVycm9yIGluc3RhbmNlb2YgQXBpRXJyb3IgPyBlcnJvci5lcnJvcnMgOiBbXTtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnJztcblxuICAgIGlmKGVycm9ycy5pbmNsdWRlcygnaW52YWxpZF9zZXNzaW9uJykgfHwgZXJyb3JzLmluY2x1ZGVzKCdleHBpcmVkX3Nlc3Npb24nKSB8fCBtZXNzYWdlID09PSAnaW52YWxpZF9zZXNzaW9uJyB8fCBtZXNzYWdlID09PSAnZXhwaXJlZF9zZXNzaW9uJykge1xuICAgICAgYXdhaXQgY2xlYXJJbnZhbGlkU2Vzc2lvblN0YXRlKGZsdXgpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVJlc3RFbmRwb2ludCA9IChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgZW5kcG9pbnQ6IHN0cmluZ1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdGFyZ2V0RW5kcG9pbnQgPSBTdHJpbmcoZW5kcG9pbnQgfHwgJycpLnRyaW0oKTtcblxuICBpZihpc0VtcHR5KHRhcmdldEVuZHBvaW50KSkge1xuICAgIHRocm93IG5ldyBBcGlFcnJvcihbJ2ludmFsaWRfdXJsJ10sICdyZXN0X2VuZHBvaW50X3JlcXVpcmVkJyk7XG4gIH1cblxuICBpZigvXmh0dHBzPzpcXC9cXC8vaS50ZXN0KHRhcmdldEVuZHBvaW50KSkge1xuICAgIHJldHVybiB0YXJnZXRFbmRwb2ludDtcbiAgfVxuXG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCBjb25maWd1cmVkRW5kcG9pbnQgPSBjb25maWcuYXBwPy5hcGk/LmVuZHBvaW50cz8uW3RhcmdldEVuZHBvaW50XSB8fCAnJztcblxuICBpZihpc0VtcHR5KGNvbmZpZ3VyZWRFbmRwb2ludCkpIHtcbiAgICB0aHJvdyBuZXcgQXBpRXJyb3IoWydpbnZhbGlkX3VybCddLCBgcmVzdF9lbmRwb2ludF9ub3RfY29uZmlndXJlZDoke3RhcmdldEVuZHBvaW50fWApO1xuICB9XG5cbiAgcmV0dXJuIGNvbmZpZ3VyZWRFbmRwb2ludDtcbn07XG5cbmV4cG9ydCBjb25zdCByZXN0UmVxdWVzdCA9IGFzeW5jIDxUID0gQXBpUmVzdWx0c1R5cGU+KFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBlbmRwb2ludDogc3RyaW5nLFxuICBtZXRob2Q6IFJlc3RNZXRob2QgPSAnR0VUJyxcbiAgcGFyYW1zPzogdW5rbm93bixcbiAgb3B0aW9uczogUmVzdEFwaU9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUPiA9PiB7XG4gIGNvbnN0IHthdXRoZW50aWNhdGUgPSBmYWxzZSwgb25TdWNjZXNzLCAuLi5odW50ZXJPcHRpb25zfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHVybCA9IHJlc29sdmVSZXN0RW5kcG9pbnQoZmx1eCwgZW5kcG9pbnQpO1xuICBjb25zdCByZXF1ZXN0TWV0aG9kID0gU3RyaW5nKG1ldGhvZCB8fCAnR0VUJykudG9VcHBlckNhc2UoKTtcbiAgY29uc3QgcmV0cnk6IFJldHJ5VHlwZSA9IHtcbiAgICByZXF1ZXN0OiB7bWV0aG9kOiByZXF1ZXN0TWV0aG9kLCBwYXJhbXMsIHVybH0sXG4gICAgcmVzcG9uc2VNZXRob2Q6IG9uU3VjY2VzcyB8fCAoKCkgPT4ge30pXG4gIH07XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBuZXR3b3JrVHlwZTogc3RyaW5nID0gZmx1eC5nZXRTdGF0ZSgnYXBwLm5ldHdvcmtUeXBlJykgYXMgc3RyaW5nO1xuXG4gICAgaWYobmV0d29ya1R5cGUgPT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe3JldHJ5LCB0eXBlOiBBUFBfQ09OU1RBTlRTLkFQSV9ORVRXT1JLX0VSUk9SfSkgYXMgUHJvbWlzZTxUPjtcbiAgICB9XG5cbiAgICBjb25zdCB0b2tlbiA9IGF1dGhlbnRpY2F0ZSA/IGF3YWl0IHJlc29sdmVBdXRoVG9rZW4oZmx1eCkgOiBodW50ZXJPcHRpb25zLnRva2VuO1xuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBIdW50ZXJPcHRpb25zVHlwZSA9IHtcbiAgICAgIC4uLmh1bnRlck9wdGlvbnMsXG4gICAgICAuLi4odG9rZW4gPyB7dG9rZW59IDoge30pXG4gICAgfTtcbiAgICBsZXQgZGF0YTogVDtcblxuICAgIHN3aXRjaChyZXF1ZXN0TWV0aG9kKSB7XG4gICAgICBjYXNlICdERUxFVEUnOlxuICAgICAgICBkYXRhID0gYXdhaXQgZGVsKHVybCwgcGFyYW1zLCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdHRVQnOlxuICAgICAgICBkYXRhID0gYXdhaXQgZ2V0KHVybCwgcGFyYW1zLCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdQT1NUJzpcbiAgICAgICAgZGF0YSA9IGF3YWl0IHBvc3QodXJsLCBwYXJhbXMsIHJlcXVlc3RPcHRpb25zKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ1BVVCc6XG4gICAgICAgIGRhdGEgPSBhd2FpdCBwdXQodXJsLCBwYXJhbXMsIHJlcXVlc3RPcHRpb25zKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGRhdGEgPSBhd2FpdCBhamF4KHVybCwgcmVxdWVzdE1ldGhvZCwgcGFyYW1zLCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGF3YWl0IGZsdXguZGlzcGF0Y2goe3R5cGU6IEFQUF9DT05TVEFOVFMuQVBJX05FVFdPUktfU1VDQ0VTU30pO1xuXG4gICAgcmV0dXJuIG9uU3VjY2VzcyA/IG9uU3VjY2VzcyhkYXRhKSA6IGRhdGE7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBjb25zdCBlcnJvcnMgPSBlcnJvciBpbnN0YW5jZW9mIEFwaUVycm9yID8gZXJyb3IuZXJyb3JzIDogW107XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJyc7XG5cbiAgICBpZihlcnJvcnMuaW5jbHVkZXMoJ2ludmFsaWRfc2Vzc2lvbicpIHx8IGVycm9ycy5pbmNsdWRlcygnZXhwaXJlZF9zZXNzaW9uJykgfHwgbWVzc2FnZSA9PT0gJ2ludmFsaWRfc2Vzc2lvbicgfHwgbWVzc2FnZSA9PT0gJ2V4cGlyZWRfc2Vzc2lvbicpIHtcbiAgICAgIGF3YWl0IGNsZWFySW52YWxpZFNlc3Npb25TdGF0ZShmbHV4KTtcbiAgICAgIHJldHVybiB7fSBhcyBUO1xuICAgIH1cblxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUXVlcnkgPSAoXG4gIG5hbWU6IHN0cmluZyxcbiAgZGF0YVR5cGU6IFJlYWt0b3JEYkNvbGxlY3Rpb24sXG4gIHZhcmlhYmxlczogQXBpUXVlcnlWYXJpYWJsZXMgPSB7fSxcbiAgcmV0dXJuUHJvcGVydGllczogc3RyaW5nW10gPSBbXSxcbiAgdHlwZSA9ICdxdWVyeSdcbikgPT4ge1xuICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHsuLi52YXJpYWJsZXMgfHwge319O1xuICBjb25zdCB2YXJpYWJsZUtleXMgPSBPYmplY3Qua2V5cyhxdWVyeVZhcmlhYmxlcyk7XG4gIGNvbnN0IHF1ZXJ5TmFtZSA9IG5hbWUucmVwbGFjZSgvIC9nLCAnJyk7XG4gIGxldCBxdWVyeTogc3RyaW5nO1xuXG4gIGlmKHR5cGUgPT09ICdtdXRhdGlvbicpIHtcbiAgICBjb25zdCBtdXRhdGlvbk5hbWUgPSB1cHBlckZpcnN0KGNhbWVsQ2FzZShkYXRhVHlwZSkpICsgdXBwZXJGaXJzdChjYW1lbENhc2UocXVlcnlOYW1lKSk7XG4gICAgcXVlcnkgPSBgJHt0eXBlfSAke211dGF0aW9uTmFtZX0ke1xuICAgICAgdmFyaWFibGVLZXlzLmxlbmd0aFxuICAgICAgICA/IGAoJHt2YXJpYWJsZUtleXMubWFwKChrZXkpID0+IGAkJHtrZXl9OiAke3F1ZXJ5VmFyaWFibGVzW2tleV0udHlwZX1gKS5qb2luKCcsICcpfSlgXG4gICAgICAgIDogJydcbiAgICB9IHtcbiAgICAgICR7ZGF0YVR5cGV9IHtcbiAgICAgICAgJHtjYW1lbENhc2UocXVlcnlOYW1lKX0ke1xuICAgICAgICAgIHZhcmlhYmxlS2V5cy5sZW5ndGhcbiAgICAgICAgICAgID8gYCgke3ZhcmlhYmxlS2V5cy5tYXAoKGtleSkgPT4gYCR7a2V5fTogJCR7a2V5fWApLmpvaW4oJywgJyl9KWBcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfVxuICAgICAgICAke3JldHVyblByb3BlcnRpZXM/Lmxlbmd0aCA/IGB7JHtyZXR1cm5Qcm9wZXJ0aWVzLmpvaW4oJywgJyl9fWAgOiAnJ31cbiAgICAgIH1cbiAgICB9YDtcbiAgfSBlbHNlIHtcbiAgICBxdWVyeSA9IGAke3R5cGV9ICR7cXVlcnlOYW1lfSR7XG4gICAgICB2YXJpYWJsZUtleXMubGVuZ3RoXG4gICAgICAgID8gYCgke3ZhcmlhYmxlS2V5cy5tYXAoKGtleSkgPT4gYCQke2tleX06ICR7cXVlcnlWYXJpYWJsZXNba2V5XS50eXBlfWApLmpvaW4oJywgJyl9KWBcbiAgICAgICAgOiAnJ1xuICAgIH0ge1xuICAgICAgJHtkYXRhVHlwZX0ge1xuICAgICAgICAke2NhbWVsQ2FzZShxdWVyeU5hbWUpfSR7XG4gICAgICAgICAgdmFyaWFibGVLZXlzLmxlbmd0aFxuICAgICAgICAgICAgPyBgKCR7dmFyaWFibGVLZXlzLm1hcCgoa2V5KSA9PiBgJHtrZXl9OiAkJHtrZXl9YCkuam9pbignLCAnKX0pYFxuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9XG4gICAgICAgICR7cmV0dXJuUHJvcGVydGllcz8ubGVuZ3RoID8gYHske3JldHVyblByb3BlcnRpZXMuam9pbignLCAnKX19YCA6ICcnfVxuICAgICAgfVxuICAgIH1gO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlZFZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB2YXJpYWJsZUtleXMucmVkdWNlKChxdWVyeURhdGEsIGtleSkgPT4ge1xuICAgIHF1ZXJ5RGF0YVtrZXldID0gcXVlcnlWYXJpYWJsZXNba2V5XS52YWx1ZTtcbiAgICByZXR1cm4gcXVlcnlEYXRhO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHtxdWVyeSwgdmFyaWFibGVzOiB1cGRhdGVkVmFyaWFibGVzfTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNdXRhdGlvbiA9IChcbiAgbmFtZTogc3RyaW5nLFxuICBkYXRhVHlwZTogUmVha3RvckRiQ29sbGVjdGlvbixcbiAgdmFyaWFibGVzOiBBcGlRdWVyeVZhcmlhYmxlcyA9IHt9LFxuICByZXR1cm5Qcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdXG4pID0+IGNyZWF0ZVF1ZXJ5KG5hbWUsIGRhdGFUeXBlLCB2YXJpYWJsZXMsIHJldHVyblByb3BlcnRpZXMsICdtdXRhdGlvbicpO1xuXG5leHBvcnQgY29uc3QgYXBwUXVlcnkgPSA8VD4oXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIG5hbWU6IHN0cmluZyxcbiAgZGF0YVR5cGU6IFJlYWt0b3JEYkNvbGxlY3Rpb24sXG4gIHF1ZXJ5VmFyaWFibGVzOiBBcGlRdWVyeVZhcmlhYmxlcyxcbiAgcmV0dXJuUHJvcGVydGllczogc3RyaW5nW10sXG4gIG9wdGlvbnM6IEFwaU9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUPiA9PiB7XG4gIGNvbnN0IHF1ZXJ5ID0gY3JlYXRlUXVlcnkobmFtZSwgZGF0YVR5cGUsIHF1ZXJ5VmFyaWFibGVzLCByZXR1cm5Qcm9wZXJ0aWVzKTtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUZsdXgoZmx1eCk7XG4gIGNvbnN0IGFwcFVybDogc3RyaW5nID0gY29uZmlnLmFwcD8uYXBpPy51cmwgfHwgJyc7XG4gIHJldHVybiBnZXRHcmFwaHFsKGZsdXgsIGFwcFVybCwgdHJ1ZSwgcXVlcnksIG9wdGlvbnMpIGFzIFByb21pc2U8VD47XG59O1xuXG5leHBvcnQgY29uc3QgYXBwTXV0YXRpb24gPSA8VD4oXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIG5hbWU6IHN0cmluZyxcbiAgZGF0YVR5cGU6IFJlYWt0b3JEYkNvbGxlY3Rpb24sXG4gIHF1ZXJ5VmFyaWFibGVzOiBBcGlRdWVyeVZhcmlhYmxlcyxcbiAgcmV0dXJuUHJvcGVydGllczogc3RyaW5nW10sXG4gIG9wdGlvbnM6IEFwaU9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUPiA9PiB7XG4gIGNvbnN0IHF1ZXJ5ID0gY3JlYXRlTXV0YXRpb24obmFtZSwgZGF0YVR5cGUsIHF1ZXJ5VmFyaWFibGVzLCByZXR1cm5Qcm9wZXJ0aWVzKTtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUZsdXgoZmx1eCk7XG4gIGNvbnN0IGFwcFVybDogc3RyaW5nID0gY29uZmlnLmFwcD8uYXBpPy51cmwgfHwgJyc7XG4gIHJldHVybiBnZXRHcmFwaHFsKGZsdXgsIGFwcFVybCwgdHJ1ZSwgcXVlcnksIG9wdGlvbnMpIGFzIFByb21pc2U8VD47XG59O1xuXG5leHBvcnQgY29uc3QgcHVibGljUXVlcnkgPSA8VD4oXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIG5hbWU6IHN0cmluZyxcbiAgZGF0YVR5cGU6IFJlYWt0b3JEYkNvbGxlY3Rpb24sXG4gIHF1ZXJ5VmFyaWFibGVzOiBBcGlRdWVyeVZhcmlhYmxlcyxcbiAgcmV0dXJuUHJvcGVydGllczogc3RyaW5nW10sXG4gIG9wdGlvbnM6IEFwaU9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUPiA9PiB7XG4gIGNvbnN0IHF1ZXJ5ID0gY3JlYXRlUXVlcnkobmFtZSwgZGF0YVR5cGUsIHF1ZXJ5VmFyaWFibGVzLCByZXR1cm5Qcm9wZXJ0aWVzKTtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUZsdXgoZmx1eCk7XG4gIGNvbnN0IHB1YmxpY1VybDogc3RyaW5nID0gY29uZmlnLmFwcD8uYXBpPy5wdWJsaWMgfHwgJyc7XG4gIHJldHVybiBnZXRHcmFwaHFsKGZsdXgsIHB1YmxpY1VybCwgZmFsc2UsIHF1ZXJ5LCBvcHRpb25zKSBhcyBQcm9taXNlPFQ+O1xufTtcblxuZXhwb3J0IGNvbnN0IHB1YmxpY011dGF0aW9uID0gPFQ+KFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBuYW1lOiBzdHJpbmcsXG4gIGRhdGFUeXBlOiBSZWFrdG9yRGJDb2xsZWN0aW9uLFxuICBxdWVyeVZhcmlhYmxlczogQXBpUXVlcnlWYXJpYWJsZXMsXG4gIHJldHVyblByb3BlcnRpZXM6IHN0cmluZ1tdLFxuICBvcHRpb25zOiBBcGlPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGNyZWF0ZU11dGF0aW9uKG5hbWUsIGRhdGFUeXBlLCBxdWVyeVZhcmlhYmxlcywgcmV0dXJuUHJvcGVydGllcyk7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCBwdWJsaWNVcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8ucHVibGljIHx8ICcnO1xuICByZXR1cm4gZ2V0R3JhcGhxbChmbHV4LCBwdWJsaWNVcmwsIGZhbHNlLCBxdWVyeSwgb3B0aW9ucykgYXMgUHJvbWlzZTxUPjtcbn07XG5cbmV4cG9ydCBjb25zdCBydW1NdXRhdGlvbiA9IDxUPihcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgbmFtZTogc3RyaW5nLFxuICBkYXRhVHlwZTogUmVha3RvckRiQ29sbGVjdGlvbixcbiAgcXVlcnlWYXJpYWJsZXM6IEFwaVF1ZXJ5VmFyaWFibGVzLFxuICByZXR1cm5Qcm9wZXJ0aWVzOiBzdHJpbmdbXSxcbiAgb3B0aW9uczogQXBpT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBjcmVhdGVNdXRhdGlvbihuYW1lLCBkYXRhVHlwZSwgcXVlcnlWYXJpYWJsZXMsIHJldHVyblByb3BlcnRpZXMpO1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgY29uc3QgcnVtVXJsOiBzdHJpbmcgPSBjb25maWcuYXBwPy5hcGk/LnJ1bSB8fCAnJztcbiAgcmV0dXJuIGdldEdyYXBocWwoZmx1eCwgcnVtVXJsLCBmYWxzZSwgcXVlcnksIG9wdGlvbnMpIGFzIFByb21pc2U8VD47XG59O1xuXG5leHBvcnQgY29uc3QgdXBsb2FkSW1hZ2UgPSAoXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIGltYWdlLFxuICBvcHRpb25zOiBIdW50ZXJPcHRpb25zVHlwZSA9IHt9XG4pOiBQcm9taXNlPEFwaVJlc3VsdHNUeXBlPiA9PiB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCB1cGxvYWRJbWFnZVVybDogc3RyaW5nID0gY29uZmlnLmFwcD8uYXBpPy51cGxvYWRJbWFnZSB8fCAnJztcbiAgY29uc3QgdG9rZW4gPSBmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udG9rZW4nKTtcblxuICBpZihpc0VtcHR5KHVwbG9hZEltYWdlVXJsKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQXBpRXJyb3IoWydpbnZhbGlkX3VybCddLCAndXBsb2FkX2VuZHBvaW50X25vdF9jb25maWd1cmVkJykpO1xuICB9XG5cbiAgaWYoaXNFbXB0eSh0b2tlbikpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEFwaUVycm9yKFsnaW52YWxpZF9zZXNzaW9uJ10sICdtaXNzaW5nX2F1dGhfdG9rZW4nKSk7XG4gIH1cblxuICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcbiAgaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7dG9rZW59YCk7XG5cbiAgaWYodHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgaGVhZGVycy5zZXQoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG5cbiAgICByZXR1cm4gZmV0Y2godXBsb2FkSW1hZ2VVcmwsIHtcbiAgICAgIGJvZHk6IGltYWdlLFxuICAgICAgaGVhZGVycyxcbiAgICAgIG1ldGhvZDogJ1BPU1QnXG4gICAgfSkudGhlbihhc3luYyAocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSB8fCAnJztcbiAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZVR5cGUuaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKVxuICAgICAgICA/IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICAgICAgICA6IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcblxuICAgICAgaWYoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgZGF0YSAmJiAnZXJyb3InIGluIGRhdGFcbiAgICAgICAgICA/IFN0cmluZygoZGF0YSBhcyB7ZXJyb3I/OiBzdHJpbmd9KS5lcnJvciB8fCByZXNwb25zZS5zdGF0dXNUZXh0KVxuICAgICAgICAgIDogU3RyaW5nKGRhdGEgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dCk7XG4gICAgICAgIHRocm93IG5ldyBBcGlFcnJvcihbJ3VwbG9hZF9lcnJvciddLCBtZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGEgYXMgQXBpUmVzdWx0c1R5cGU7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcG9zdCh1cGxvYWRJbWFnZVVybCwgaW1hZ2UsIHtoZWFkZXJzLCAuLi5vcHRpb25zfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVmcmVzaFNlc3Npb24gPSBhc3luYyAoXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIHRva2VuPzogc3RyaW5nLFxuICBleHBpcmVzPzogbnVtYmVyXG4pOiBQcm9taXNlPEZsdXhBY3Rpb24gfCBudWxsPiA9PiB7XG4gIGNvbnN0IHJlZnJlc2hUb2tlbiA9IGlzRW1wdHkodG9rZW4pID8gZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnRva2VuJykgOiB0b2tlbjtcblxuICBpZihpc0VtcHR5KHJlZnJlc2hUb2tlbikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHRva2VuRXhwaXJlc0F0ID0gcGFyc2VKd3RFeHBpcnlNcyhTdHJpbmcocmVmcmVzaFRva2VuKSk7XG5cbiAgaWYodG9rZW5FeHBpcmVzQXQgPiAwICYmIERhdGUubm93KCkgPj0gdG9rZW5FeHBpcmVzQXQpIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignZXhwaXJlZF9zZXNzaW9uJyk7XG4gICAgYXdhaXQgY2xlYXJJbnZhbGlkU2Vzc2lvblN0YXRlKGZsdXgpO1xuICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5HRVRfU0VTU0lPTl9FUlJPUn0pO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgICBjb25zdCByZXF1ZXN0ZWRFeHBpcmVzID0gTWF0aC5tYXgoXG4gICAgICAxLFxuICAgICAgTnVtYmVyKGV4cGlyZXMgfHwgY29uZmlnLmFwcD8uc2Vzc2lvbj8ubWF4TWludXRlcyB8fCBERUZBVUxUX1NFU1NJT05fTUFYX01JTlVURVMpXG4gICAgKTtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIGV4cGlyZXM6IHtcbiAgICAgICAgdHlwZTogJ0ludCcsXG4gICAgICAgIHZhbHVlOiByZXF1ZXN0ZWRFeHBpcmVzXG4gICAgICB9LFxuICAgICAgdG9rZW46IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICB2YWx1ZTogcmVmcmVzaFRva2VuXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvblN1Y2Nlc3MgPSBhc3luYyAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSk6IFByb21pc2U8Rmx1eEFjdGlvbj4gPT4ge1xuICAgICAgY29uc3QgcmF3U2Vzc2lvbkRhdGEgPSAoZGF0YSBhcyB7dXNlcnM/OiB7cmVmcmVzaFNlc3Npb24/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn19KT8udXNlcnM/LnJlZnJlc2hTZXNzaW9uO1xuICAgICAgY29uc3Qgc2Vzc2lvbkRhdGEgPSByYXdTZXNzaW9uRGF0YSAmJiB0eXBlb2YgcmF3U2Vzc2lvbkRhdGEgPT09ICdvYmplY3QnXG4gICAgICAgID8gcmF3U2Vzc2lvbkRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICAgOiB7fTtcbiAgICAgIGNvbnN0IGN1cnJlbnRTZXNzaW9uID0gKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIHt9KSB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBjb25zdCBtZXJnZWRTZXNzaW9uID0gYXdhaXQgc3RvcmVTZXNzaW9uKGZsdXgsIHsuLi5jdXJyZW50U2Vzc2lvbiwgLi4uc2Vzc2lvbkRhdGF9KTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtzZXNzaW9uOiBtZXJnZWRTZXNzaW9uLCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5VUERBVEVfU0VTU0lPTl9TVUNDRVNTfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBhd2FpdCBwdWJsaWNNdXRhdGlvbihmbHV4LCAncmVmcmVzaFNlc3Npb24nLCAndXNlcnMnLCBxdWVyeVZhcmlhYmxlcywgWydleHBpcmVzJywgJ2lzc3VlZCcsICd0b2tlbiddLCB7XG4gICAgICBvblN1Y2Nlc3NcbiAgICB9KTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJyc7XG5cbiAgICBpZihlcnJvck1lc3NhZ2UgPT09ICdpbnZhbGlkX3Nlc3Npb24nIHx8IGVycm9yTWVzc2FnZSA9PT0gJ2V4cGlyZWRfc2Vzc2lvbicpIHtcbiAgICAgIGF3YWl0IGNsZWFySW52YWxpZFNlc3Npb25TdGF0ZShmbHV4KTtcbiAgICB9XG5cbiAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX1NFU1NJT05fRVJST1J9KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJBcGlFcnJvciIsImFqYXgiLCJkZWwiLCJnZXQiLCJncmFwaHFsUXVlcnkiLCJwb3N0IiwicHV0IiwiY2FtZWxDYXNlIiwiaXNFbXB0eSIsInVwcGVyRmlyc3QiLCJBUFBfQ09OU1RBTlRTIiwiVVNFUl9DT05TVEFOVFMiLCJnZXRDb25maWdGcm9tRmx1eCIsImNsZWFyUGVyc2lzdGVkU2Vzc2lvbiIsImdldFJlZnJlc2hXaW5kb3dNaW51dGVzIiwiaHlkcmF0ZVNlc3Npb25Gcm9tU3RvcmFnZSIsInBhcnNlSnd0RXhwaXJ5TXMiLCJzdG9yZVNlc3Npb24iLCJERUZBVUxUX1JFRlJFU0hfV0lORE9XX01JTlVURVMiLCJERUZBVUxUX1NFU1NJT05fTUFYX01JTlVURVMiLCJnZXRNaW51dGVzVW50aWwiLCJleHBpcmVzQXQiLCJNYXRoIiwicm91bmQiLCJEYXRlIiwibm93IiwiY2xlYXJJbnZhbGlkU2Vzc2lvblN0YXRlIiwiZmx1eCIsImNsZWFyQXBwRGF0YSIsImRpc3BhdGNoIiwic2Vzc2lvbiIsInR5cGUiLCJTSUdOX09VVF9TVUNDRVNTIiwicmVzb2x2ZUF1dGhUb2tlbiIsInN0YXRlU2Vzc2lvbiIsImdldFN0YXRlIiwiaHlkcmF0ZWRTZXNzaW9uIiwidG9rZW4iLCJleHBpcmVzIiwiYXV0aEV4cGlyZXMiLCJpc3N1ZWQiLCJhdXRoSXNzdWVkIiwiaHlkcmF0ZWRUb2tlbiIsInRva2VuRXhwaXJlc0F0IiwiY29uZmlnIiwibWludXRlc1VudGlsRXhwaXJ5IiwiTnVtYmVyIiwic2Vzc2lvbkxpZmV0aW1lTWludXRlcyIsInJlZnJlc2hXaW5kb3dNaW51dGVzIiwiYXBwIiwicmVmcmVzaEV4cGlyZXNNaW51dGVzIiwibWF4IiwibWF4TWludXRlcyIsInVwZGF0ZWRTZXNzaW9uIiwicmVmcmVzaFNlc3Npb24iLCJuZXdUb2tlbiIsImdldEdyYXBocWwiLCJ1cmwiLCJhdXRoZW50aWNhdGUiLCJxdWVyeSIsIm9wdGlvbnMiLCJvblN1Y2Nlc3MiLCJyZXRyeSIsInJlc3BvbnNlTWV0aG9kIiwibmV0d29ya1R5cGUiLCJBUElfTkVUV09SS19FUlJPUiIsInRoZW4iLCJyZXN1bHRzIiwiQVBJX05FVFdPUktfU1VDQ0VTUyIsImRhdGEiLCJjYXRjaCIsImVycm9yIiwiZXJyb3JzIiwiaW5jbHVkZXMiLCJQcm9taXNlIiwicmVqZWN0IiwicmVzb2x2ZSIsIm1lc3NhZ2UiLCJFcnJvciIsInJlc29sdmVSZXN0RW5kcG9pbnQiLCJlbmRwb2ludCIsInRhcmdldEVuZHBvaW50IiwiU3RyaW5nIiwidHJpbSIsInRlc3QiLCJjb25maWd1cmVkRW5kcG9pbnQiLCJhcGkiLCJlbmRwb2ludHMiLCJyZXN0UmVxdWVzdCIsIm1ldGhvZCIsInBhcmFtcyIsImh1bnRlck9wdGlvbnMiLCJyZXF1ZXN0TWV0aG9kIiwidG9VcHBlckNhc2UiLCJyZXF1ZXN0IiwicmVxdWVzdE9wdGlvbnMiLCJjcmVhdGVRdWVyeSIsIm5hbWUiLCJkYXRhVHlwZSIsInZhcmlhYmxlcyIsInJldHVyblByb3BlcnRpZXMiLCJxdWVyeVZhcmlhYmxlcyIsInZhcmlhYmxlS2V5cyIsIk9iamVjdCIsImtleXMiLCJxdWVyeU5hbWUiLCJyZXBsYWNlIiwibXV0YXRpb25OYW1lIiwibGVuZ3RoIiwibWFwIiwia2V5Iiwiam9pbiIsInVwZGF0ZWRWYXJpYWJsZXMiLCJyZWR1Y2UiLCJxdWVyeURhdGEiLCJ2YWx1ZSIsImNyZWF0ZU11dGF0aW9uIiwiYXBwUXVlcnkiLCJhcHBVcmwiLCJhcHBNdXRhdGlvbiIsInB1YmxpY1F1ZXJ5IiwicHVibGljVXJsIiwicHVibGljIiwicHVibGljTXV0YXRpb24iLCJydW1NdXRhdGlvbiIsInJ1bVVybCIsInJ1bSIsInVwbG9hZEltYWdlIiwiaW1hZ2UiLCJ1cGxvYWRJbWFnZVVybCIsImhlYWRlcnMiLCJIZWFkZXJzIiwic2V0IiwiRm9ybURhdGEiLCJmZXRjaCIsImJvZHkiLCJyZXNwb25zZSIsInJlc3BvbnNlVHlwZSIsImpzb24iLCJ0ZXh0Iiwib2siLCJzdGF0dXNUZXh0IiwicmVmcmVzaFRva2VuIiwiR0VUX1NFU1NJT05fRVJST1IiLCJyZXF1ZXN0ZWRFeHBpcmVzIiwicmF3U2Vzc2lvbkRhdGEiLCJ1c2VycyIsInNlc3Npb25EYXRhIiwiY3VycmVudFNlc3Npb24iLCJtZXJnZWRTZXNzaW9uIiwiVVBEQVRFX1NFU1NJT05fU1VDQ0VTUyIsImVycm9yTWVzc2FnZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsUUFBUSxFQUFFQyxJQUFJLEVBQUVDLEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxZQUFZLEVBQUVDLElBQUksRUFBRUMsR0FBRyxRQUFPLG9CQUFvQjtBQUNwRixTQUFRQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsVUFBVSxRQUFPLGVBQWU7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
@@ -8,9 +8,9 @@ export declare const createBaseActions: <T extends BaseAdapterOptions>(flux: Flu
8
8
  createMutationAction: <R = any>(mutationName: string, dataType: string, queryVariables: Record<string, any>, props: string[], successType: string, errorType: string, mutationFn: any) => (input?: unknown) => Promise<R>;
9
9
  createQueryAction: <R = any>(queryName: string, dataType: string, queryVariables: Record<string, any>, props: string[], successType: string, errorType: string, queryFn: any) => () => Promise<R>;
10
10
  flux: FluxFramework;
11
- updateAdapter: (adapter: (input: unknown, options?: T) => any) => void;
11
+ updateAdapter: (adapter: (input: unknown, options?: T | undefined) => any) => void;
12
12
  updateOptions: (options: T) => void;
13
13
  updateAdapterOptions: (options: T) => void;
14
- validator: (input: unknown, validatorOptions?: T) => any;
14
+ validator: (input: unknown, validatorOptions?: T | undefined) => any;
15
15
  };
16
16
  //# sourceMappingURL=baseActionFactory.d.ts.map
@@ -1,3 +1,3 @@
1
1
  import { DateTime } from 'luxon';
2
- export declare const parseDateTime: (value: string | number | DateTime) => any;
2
+ export declare const parseDateTime: (value: string | number | DateTime) => number;
3
3
  //# sourceMappingURL=dateUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dateUtils.d.ts","sourceRoot":"","sources":["../../src/utils/dateUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,OAAO,CAAC;AAE/B,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,GAAG,MAAM,GAAG,QAAQ,QAQ9D,CAAC"}
1
+ {"version":3,"file":"dateUtils.d.ts","sourceRoot":"","sources":["../../src/utils/dateUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,OAAO,CAAC;AAE/B,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,GAAG,MAAM,GAAG,QAAQ,WAQ9D,CAAC"}
@@ -2,13 +2,13 @@
2
2
  * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
3
  * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
4
  */
5
- export { appMutation, appQuery, getGraphql, publicMutation, publicQuery, refreshSession, uploadImage, type ApiResultsType, type ReaktorDbCollection, type SessionType } from './api.js';
5
+ export { appMutation, appQuery, getGraphql, publicMutation, publicQuery, rumMutation, refreshSession, resolveRestEndpoint, restRequest, uploadImage, type ApiResultsType, type ReaktorDbCollection, type RestApiOptions, type RestMethod, type SessionType } from './api.js';
6
6
  export { createAction, createActions, createAllActions, type ActionOptions, type ActionReturnType, type ActionType, type ActionTypes } from './actionFactory.js';
7
7
  export { createBaseActions, type BaseActionOptions } from './baseActionFactory.js';
8
8
  export { createValidatorFactory, createValidatorManager, type BaseAdapterOptions } from './validatorFactory.js';
9
9
  export { MetropolisContext, MetropolisProvider } from './MetropolisProvider.js';
10
10
  export { PermissionGuard, PermissionLevel, usePermissions, type Permission, type PermissionGuardProps, type UsePermissionsReturn } from './permissionUtils.js';
11
- export { useMetropolis } from './useMetropolis.js';
11
+ export { useContentActions, useAwsRum, useCrmActions, useEventActions, useGroupActions, useImageActions, useLocationActions, useMessageActions, useMetropolis, useMetropolisConfig, useMetropolisFlux, usePermissionActions, usePersonaActions, usePostActions, useReactionActions, useRestActions, useTagActions, useTranslationActions, useUserActions, useVideoActions, useWebsocketActions } from './useMetropolis.js';
12
12
  export { useConversationTyping, type ConversationTypingOptions, type UseConversationTypingOptions } from './useConversationTyping.js';
13
13
  export { useTranslations } from './useTranslations.js';
14
14
  export * from './app.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,WAAW,EACX,QAAQ,EACR,UAAU,EACV,cAAc,EACd,WAAW,EACX,cAAc,EACd,WAAW,EACX,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EACjB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,iBAAiB,EACjB,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAC,iBAAiB,EAAE,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EACL,eAAe,EACf,eAAe,EACf,cAAc,EACd,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAC,qBAAqB,EAAE,KAAK,yBAAyB,EAAE,KAAK,4BAA4B,EAAC,MAAM,4BAA4B,CAAC;AACpI,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AAGrD,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,WAAW,EACX,QAAQ,EACR,UAAU,EACV,cAAc,EACd,WAAW,EACX,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,WAAW,EACjB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,iBAAiB,EACjB,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAC,iBAAiB,EAAE,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EACL,eAAe,EACf,eAAe,EACf,cAAc,EACd,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,eAAe,EACf,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,qBAAqB,EAAE,KAAK,yBAAyB,EAAE,KAAK,4BAA4B,EAAC,MAAM,4BAA4B,CAAC;AACpI,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AAGrD,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
3
  * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
4
  */ // Export API utilities
5
- export { appMutation, appQuery, getGraphql, publicMutation, publicQuery, refreshSession, uploadImage } from './api.js';
5
+ export { appMutation, appQuery, getGraphql, publicMutation, publicQuery, rumMutation, refreshSession, resolveRestEndpoint, restRequest, uploadImage } from './api.js';
6
6
  // Export action factory
7
7
  export { createAction, createActions, createAllActions } from './actionFactory.js';
8
8
  // Export base action factory
@@ -12,7 +12,7 @@ export { createValidatorFactory, createValidatorManager } from './validatorFacto
12
12
  // Export React hooks
13
13
  export { MetropolisContext, MetropolisProvider } from './MetropolisProvider.js';
14
14
  export { PermissionGuard, PermissionLevel, usePermissions } from './permissionUtils.js';
15
- export { useMetropolis } from './useMetropolis.js';
15
+ export { useContentActions, useAwsRum, useCrmActions, useEventActions, useGroupActions, useImageActions, useLocationActions, useMessageActions, useMetropolis, useMetropolisConfig, useMetropolisFlux, usePermissionActions, usePersonaActions, usePostActions, useReactionActions, useRestActions, useTagActions, useTranslationActions, useUserActions, useVideoActions, useWebsocketActions } from './useMetropolis.js';
16
16
  export { useConversationTyping } from './useConversationTyping.js';
17
17
  export { useTranslations } from './useTranslations.js';
18
18
  // Export utility functions
@@ -23,4 +23,4 @@ export * from './i18n.js';
23
23
  export * from './location.js';
24
24
  export * from './session.js';
25
25
 
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuLy8gRXhwb3J0IEFQSSB1dGlsaXRpZXNcbmV4cG9ydCB7XG4gIGFwcE11dGF0aW9uLFxuICBhcHBRdWVyeSxcbiAgZ2V0R3JhcGhxbCxcbiAgcHVibGljTXV0YXRpb24sXG4gIHB1YmxpY1F1ZXJ5LFxuICByZWZyZXNoU2Vzc2lvbixcbiAgdXBsb2FkSW1hZ2UsXG4gIHR5cGUgQXBpUmVzdWx0c1R5cGUsXG4gIHR5cGUgUmVha3RvckRiQ29sbGVjdGlvbixcbiAgdHlwZSBTZXNzaW9uVHlwZVxufSBmcm9tICcuL2FwaS5qcyc7XG5cbi8vIEV4cG9ydCBhY3Rpb24gZmFjdG9yeVxuZXhwb3J0IHtcbiAgY3JlYXRlQWN0aW9uLFxuICBjcmVhdGVBY3Rpb25zLFxuICBjcmVhdGVBbGxBY3Rpb25zLFxuICB0eXBlIEFjdGlvbk9wdGlvbnMsXG4gIHR5cGUgQWN0aW9uUmV0dXJuVHlwZSxcbiAgdHlwZSBBY3Rpb25UeXBlLFxuICB0eXBlIEFjdGlvblR5cGVzXG59IGZyb20gJy4vYWN0aW9uRmFjdG9yeS5qcyc7XG5cbi8vIEV4cG9ydCBiYXNlIGFjdGlvbiBmYWN0b3J5XG5leHBvcnQge1xuICBjcmVhdGVCYXNlQWN0aW9ucyxcbiAgdHlwZSBCYXNlQWN0aW9uT3B0aW9uc1xufSBmcm9tICcuL2Jhc2VBY3Rpb25GYWN0b3J5LmpzJztcblxuLy8gRXhwb3J0IHZhbGlkYXRvciBmYWN0b3J5XG5leHBvcnQge1xuICBjcmVhdGVWYWxpZGF0b3JGYWN0b3J5LFxuICBjcmVhdGVWYWxpZGF0b3JNYW5hZ2VyLFxuICB0eXBlIEJhc2VBZGFwdGVyT3B0aW9uc1xufSBmcm9tICcuL3ZhbGlkYXRvckZhY3RvcnkuanMnO1xuXG4vLyBFeHBvcnQgUmVhY3QgaG9va3NcbmV4cG9ydCB7TWV0cm9wb2xpc0NvbnRleHQsIE1ldHJvcG9saXNQcm92aWRlcn0gZnJvbSAnLi9NZXRyb3BvbGlzUHJvdmlkZXIuanMnO1xuZXhwb3J0IHtcbiAgUGVybWlzc2lvbkd1YXJkLFxuICBQZXJtaXNzaW9uTGV2ZWwsXG4gIHVzZVBlcm1pc3Npb25zLFxuICB0eXBlIFBlcm1pc3Npb24sXG4gIHR5cGUgUGVybWlzc2lvbkd1YXJkUHJvcHMsXG4gIHR5cGUgVXNlUGVybWlzc2lvbnNSZXR1cm5cbn0gZnJvbSAnLi9wZXJtaXNzaW9uVXRpbHMuanMnO1xuZXhwb3J0IHt1c2VNZXRyb3BvbGlzfSBmcm9tICcuL3VzZU1ldHJvcG9saXMuanMnO1xuZXhwb3J0IHt1c2VDb252ZXJzYXRpb25UeXBpbmcsIHR5cGUgQ29udmVyc2F0aW9uVHlwaW5nT3B0aW9ucywgdHlwZSBVc2VDb252ZXJzYXRpb25UeXBpbmdPcHRpb25zfSBmcm9tICcuL3VzZUNvbnZlcnNhdGlvblR5cGluZy5qcyc7XG5leHBvcnQge3VzZVRyYW5zbGF0aW9uc30gZnJvbSAnLi91c2VUcmFuc2xhdGlvbnMuanMnO1xuXG4vLyBFeHBvcnQgdXRpbGl0eSBmdW5jdGlvbnNcbmV4cG9ydCAqIGZyb20gJy4vYXBwLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZVV0aWxzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2kxOG4uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2NhdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Nlc3Npb24uanMnO1xuXG4iXSwibmFtZXMiOlsiYXBwTXV0YXRpb24iLCJhcHBRdWVyeSIsImdldEdyYXBocWwiLCJwdWJsaWNNdXRhdGlvbiIsInB1YmxpY1F1ZXJ5IiwicmVmcmVzaFNlc3Npb24iLCJ1cGxvYWRJbWFnZSIsImNyZWF0ZUFjdGlvbiIsImNyZWF0ZUFjdGlvbnMiLCJjcmVhdGVBbGxBY3Rpb25zIiwiY3JlYXRlQmFzZUFjdGlvbnMiLCJjcmVhdGVWYWxpZGF0b3JGYWN0b3J5IiwiY3JlYXRlVmFsaWRhdG9yTWFuYWdlciIsIk1ldHJvcG9saXNDb250ZXh0IiwiTWV0cm9wb2xpc1Byb3ZpZGVyIiwiUGVybWlzc2lvbkd1YXJkIiwiUGVybWlzc2lvbkxldmVsIiwidXNlUGVybWlzc2lvbnMiLCJ1c2VNZXRyb3BvbGlzIiwidXNlQ29udmVyc2F0aW9uVHlwaW5nIiwidXNlVHJhbnNsYXRpb25zIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FFRCx1QkFBdUI7QUFDdkIsU0FDRUEsV0FBVyxFQUNYQyxRQUFRLEVBQ1JDLFVBQVUsRUFDVkMsY0FBYyxFQUNkQyxXQUFXLEVBQ1hDLGNBQWMsRUFDZEMsV0FBVyxRQUlOLFdBQVc7QUFFbEIsd0JBQXdCO0FBQ3hCLFNBQ0VDLFlBQVksRUFDWkMsYUFBYSxFQUNiQyxnQkFBZ0IsUUFLWCxxQkFBcUI7QUFFNUIsNkJBQTZCO0FBQzdCLFNBQ0VDLGlCQUFpQixRQUVaLHlCQUF5QjtBQUVoQywyQkFBMkI7QUFDM0IsU0FDRUMsc0JBQXNCLEVBQ3RCQyxzQkFBc0IsUUFFakIsd0JBQXdCO0FBRS9CLHFCQUFxQjtBQUNyQixTQUFRQyxpQkFBaUIsRUFBRUMsa0JBQWtCLFFBQU8sMEJBQTBCO0FBQzlFLFNBQ0VDLGVBQWUsRUFDZkMsZUFBZSxFQUNmQyxjQUFjLFFBSVQsdUJBQXVCO0FBQzlCLFNBQVFDLGFBQWEsUUFBTyxxQkFBcUI7QUFDakQsU0FBUUMscUJBQXFCLFFBQTBFLDZCQUE2QjtBQUNwSSxTQUFRQyxlQUFlLFFBQU8sdUJBQXVCO0FBRXJELDJCQUEyQjtBQUMzQixjQUFjLFdBQVc7QUFDekIsY0FBYyxpQkFBaUI7QUFDL0IsY0FBYyxZQUFZO0FBQzFCLGNBQWMsWUFBWTtBQUMxQixjQUFjLGdCQUFnQjtBQUM5QixjQUFjLGVBQWUifQ==
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuLy8gRXhwb3J0IEFQSSB1dGlsaXRpZXNcbmV4cG9ydCB7XG4gIGFwcE11dGF0aW9uLFxuICBhcHBRdWVyeSxcbiAgZ2V0R3JhcGhxbCxcbiAgcHVibGljTXV0YXRpb24sXG4gIHB1YmxpY1F1ZXJ5LFxuICBydW1NdXRhdGlvbixcbiAgcmVmcmVzaFNlc3Npb24sXG4gIHJlc29sdmVSZXN0RW5kcG9pbnQsXG4gIHJlc3RSZXF1ZXN0LFxuICB1cGxvYWRJbWFnZSxcbiAgdHlwZSBBcGlSZXN1bHRzVHlwZSxcbiAgdHlwZSBSZWFrdG9yRGJDb2xsZWN0aW9uLFxuICB0eXBlIFJlc3RBcGlPcHRpb25zLFxuICB0eXBlIFJlc3RNZXRob2QsXG4gIHR5cGUgU2Vzc2lvblR5cGVcbn0gZnJvbSAnLi9hcGkuanMnO1xuXG4vLyBFeHBvcnQgYWN0aW9uIGZhY3RvcnlcbmV4cG9ydCB7XG4gIGNyZWF0ZUFjdGlvbixcbiAgY3JlYXRlQWN0aW9ucyxcbiAgY3JlYXRlQWxsQWN0aW9ucyxcbiAgdHlwZSBBY3Rpb25PcHRpb25zLFxuICB0eXBlIEFjdGlvblJldHVyblR5cGUsXG4gIHR5cGUgQWN0aW9uVHlwZSxcbiAgdHlwZSBBY3Rpb25UeXBlc1xufSBmcm9tICcuL2FjdGlvbkZhY3RvcnkuanMnO1xuXG4vLyBFeHBvcnQgYmFzZSBhY3Rpb24gZmFjdG9yeVxuZXhwb3J0IHtcbiAgY3JlYXRlQmFzZUFjdGlvbnMsXG4gIHR5cGUgQmFzZUFjdGlvbk9wdGlvbnNcbn0gZnJvbSAnLi9iYXNlQWN0aW9uRmFjdG9yeS5qcyc7XG5cbi8vIEV4cG9ydCB2YWxpZGF0b3IgZmFjdG9yeVxuZXhwb3J0IHtcbiAgY3JlYXRlVmFsaWRhdG9yRmFjdG9yeSxcbiAgY3JlYXRlVmFsaWRhdG9yTWFuYWdlcixcbiAgdHlwZSBCYXNlQWRhcHRlck9wdGlvbnNcbn0gZnJvbSAnLi92YWxpZGF0b3JGYWN0b3J5LmpzJztcblxuLy8gRXhwb3J0IFJlYWN0IGhvb2tzXG5leHBvcnQge01ldHJvcG9saXNDb250ZXh0LCBNZXRyb3BvbGlzUHJvdmlkZXJ9IGZyb20gJy4vTWV0cm9wb2xpc1Byb3ZpZGVyLmpzJztcbmV4cG9ydCB7XG4gIFBlcm1pc3Npb25HdWFyZCxcbiAgUGVybWlzc2lvbkxldmVsLFxuICB1c2VQZXJtaXNzaW9ucyxcbiAgdHlwZSBQZXJtaXNzaW9uLFxuICB0eXBlIFBlcm1pc3Npb25HdWFyZFByb3BzLFxuICB0eXBlIFVzZVBlcm1pc3Npb25zUmV0dXJuXG59IGZyb20gJy4vcGVybWlzc2lvblV0aWxzLmpzJztcbmV4cG9ydCB7XG4gIHVzZUNvbnRlbnRBY3Rpb25zLFxuICB1c2VBd3NSdW0sXG4gIHVzZUNybUFjdGlvbnMsXG4gIHVzZUV2ZW50QWN0aW9ucyxcbiAgdXNlR3JvdXBBY3Rpb25zLFxuICB1c2VJbWFnZUFjdGlvbnMsXG4gIHVzZUxvY2F0aW9uQWN0aW9ucyxcbiAgdXNlTWVzc2FnZUFjdGlvbnMsXG4gIHVzZU1ldHJvcG9saXMsXG4gIHVzZU1ldHJvcG9saXNDb25maWcsXG4gIHVzZU1ldHJvcG9saXNGbHV4LFxuICB1c2VQZXJtaXNzaW9uQWN0aW9ucyxcbiAgdXNlUGVyc29uYUFjdGlvbnMsXG4gIHVzZVBvc3RBY3Rpb25zLFxuICB1c2VSZWFjdGlvbkFjdGlvbnMsXG4gIHVzZVJlc3RBY3Rpb25zLFxuICB1c2VUYWdBY3Rpb25zLFxuICB1c2VUcmFuc2xhdGlvbkFjdGlvbnMsXG4gIHVzZVVzZXJBY3Rpb25zLFxuICB1c2VWaWRlb0FjdGlvbnMsXG4gIHVzZVdlYnNvY2tldEFjdGlvbnNcbn0gZnJvbSAnLi91c2VNZXRyb3BvbGlzLmpzJztcbmV4cG9ydCB7dXNlQ29udmVyc2F0aW9uVHlwaW5nLCB0eXBlIENvbnZlcnNhdGlvblR5cGluZ09wdGlvbnMsIHR5cGUgVXNlQ29udmVyc2F0aW9uVHlwaW5nT3B0aW9uc30gZnJvbSAnLi91c2VDb252ZXJzYXRpb25UeXBpbmcuanMnO1xuZXhwb3J0IHt1c2VUcmFuc2xhdGlvbnN9IGZyb20gJy4vdXNlVHJhbnNsYXRpb25zLmpzJztcblxuLy8gRXhwb3J0IHV0aWxpdHkgZnVuY3Rpb25zXG5leHBvcnQgKiBmcm9tICcuL2FwcC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGVVdGlscy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pMThuLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbG9jYXRpb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXNzaW9uLmpzJztcbiJdLCJuYW1lcyI6WyJhcHBNdXRhdGlvbiIsImFwcFF1ZXJ5IiwiZ2V0R3JhcGhxbCIsInB1YmxpY011dGF0aW9uIiwicHVibGljUXVlcnkiLCJydW1NdXRhdGlvbiIsInJlZnJlc2hTZXNzaW9uIiwicmVzb2x2ZVJlc3RFbmRwb2ludCIsInJlc3RSZXF1ZXN0IiwidXBsb2FkSW1hZ2UiLCJjcmVhdGVBY3Rpb24iLCJjcmVhdGVBY3Rpb25zIiwiY3JlYXRlQWxsQWN0aW9ucyIsImNyZWF0ZUJhc2VBY3Rpb25zIiwiY3JlYXRlVmFsaWRhdG9yRmFjdG9yeSIsImNyZWF0ZVZhbGlkYXRvck1hbmFnZXIiLCJNZXRyb3BvbGlzQ29udGV4dCIsIk1ldHJvcG9saXNQcm92aWRlciIsIlBlcm1pc3Npb25HdWFyZCIsIlBlcm1pc3Npb25MZXZlbCIsInVzZVBlcm1pc3Npb25zIiwidXNlQ29udGVudEFjdGlvbnMiLCJ1c2VBd3NSdW0iLCJ1c2VDcm1BY3Rpb25zIiwidXNlRXZlbnRBY3Rpb25zIiwidXNlR3JvdXBBY3Rpb25zIiwidXNlSW1hZ2VBY3Rpb25zIiwidXNlTG9jYXRpb25BY3Rpb25zIiwidXNlTWVzc2FnZUFjdGlvbnMiLCJ1c2VNZXRyb3BvbGlzIiwidXNlTWV0cm9wb2xpc0NvbmZpZyIsInVzZU1ldHJvcG9saXNGbHV4IiwidXNlUGVybWlzc2lvbkFjdGlvbnMiLCJ1c2VQZXJzb25hQWN0aW9ucyIsInVzZVBvc3RBY3Rpb25zIiwidXNlUmVhY3Rpb25BY3Rpb25zIiwidXNlUmVzdEFjdGlvbnMiLCJ1c2VUYWdBY3Rpb25zIiwidXNlVHJhbnNsYXRpb25BY3Rpb25zIiwidXNlVXNlckFjdGlvbnMiLCJ1c2VWaWRlb0FjdGlvbnMiLCJ1c2VXZWJzb2NrZXRBY3Rpb25zIiwidXNlQ29udmVyc2F0aW9uVHlwaW5nIiwidXNlVHJhbnNsYXRpb25zIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FFRCx1QkFBdUI7QUFDdkIsU0FDRUEsV0FBVyxFQUNYQyxRQUFRLEVBQ1JDLFVBQVUsRUFDVkMsY0FBYyxFQUNkQyxXQUFXLEVBQ1hDLFdBQVcsRUFDWEMsY0FBYyxFQUNkQyxtQkFBbUIsRUFDbkJDLFdBQVcsRUFDWEMsV0FBVyxRQU1OLFdBQVc7QUFFbEIsd0JBQXdCO0FBQ3hCLFNBQ0VDLFlBQVksRUFDWkMsYUFBYSxFQUNiQyxnQkFBZ0IsUUFLWCxxQkFBcUI7QUFFNUIsNkJBQTZCO0FBQzdCLFNBQ0VDLGlCQUFpQixRQUVaLHlCQUF5QjtBQUVoQywyQkFBMkI7QUFDM0IsU0FDRUMsc0JBQXNCLEVBQ3RCQyxzQkFBc0IsUUFFakIsd0JBQXdCO0FBRS9CLHFCQUFxQjtBQUNyQixTQUFRQyxpQkFBaUIsRUFBRUMsa0JBQWtCLFFBQU8sMEJBQTBCO0FBQzlFLFNBQ0VDLGVBQWUsRUFDZkMsZUFBZSxFQUNmQyxjQUFjLFFBSVQsdUJBQXVCO0FBQzlCLFNBQ0VDLGlCQUFpQixFQUNqQkMsU0FBUyxFQUNUQyxhQUFhLEVBQ2JDLGVBQWUsRUFDZkMsZUFBZSxFQUNmQyxlQUFlLEVBQ2ZDLGtCQUFrQixFQUNsQkMsaUJBQWlCLEVBQ2pCQyxhQUFhLEVBQ2JDLG1CQUFtQixFQUNuQkMsaUJBQWlCLEVBQ2pCQyxvQkFBb0IsRUFDcEJDLGlCQUFpQixFQUNqQkMsY0FBYyxFQUNkQyxrQkFBa0IsRUFDbEJDLGNBQWMsRUFDZEMsYUFBYSxFQUNiQyxxQkFBcUIsRUFDckJDLGNBQWMsRUFDZEMsZUFBZSxFQUNmQyxtQkFBbUIsUUFDZCxxQkFBcUI7QUFDNUIsU0FBUUMscUJBQXFCLFFBQTBFLDZCQUE2QjtBQUNwSSxTQUFRQyxlQUFlLFFBQU8sdUJBQXVCO0FBRXJELDJCQUEyQjtBQUMzQixjQUFjLFdBQVc7QUFDekIsY0FBYyxpQkFBaUI7QUFDL0IsY0FBYyxZQUFZO0FBQzFCLGNBQWMsWUFBWTtBQUMxQixjQUFjLGdCQUFnQjtBQUM5QixjQUFjLGVBQWUifQ==