@nlabs/reaktor 1.8.0 → 1.9.1

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 (283) hide show
  1. package/README.md +62 -1
  2. package/docs/GENERATION.md +63 -0
  3. package/lib/actions/analytics.js +1 -1
  4. package/lib/actions/apps.d.ts +2 -2
  5. package/lib/actions/apps.js +1 -1
  6. package/lib/actions/connections.js +1 -1
  7. package/lib/actions/content.js +1 -1
  8. package/lib/actions/contentGeneration.d.ts +40 -0
  9. package/lib/actions/contentGeneration.js +206 -0
  10. package/lib/actions/conversations.js +1 -1
  11. package/lib/actions/crm.js +1 -1
  12. package/lib/actions/crud.d.ts +2 -2
  13. package/lib/actions/crud.js +1 -1
  14. package/lib/actions/dynamodb.js +1 -1
  15. package/lib/actions/email.js +1 -1
  16. package/lib/actions/files.d.ts +42 -4
  17. package/lib/actions/files.js +1 -1
  18. package/lib/actions/flags.js +1 -1
  19. package/lib/actions/geminiVideo.d.ts +19 -0
  20. package/lib/actions/geminiVideo.js +161 -0
  21. package/lib/actions/groups.js +1 -1
  22. package/lib/actions/higgsfield.d.ts +20 -0
  23. package/lib/actions/higgsfield.js +148 -0
  24. package/lib/actions/imageGeneration.d.ts +37 -0
  25. package/lib/actions/imageGeneration.js +121 -0
  26. package/lib/actions/images.js +1 -1
  27. package/lib/actions/index.d.ts +5 -0
  28. package/lib/actions/index.js +6 -1
  29. package/lib/actions/ios.js +1 -1
  30. package/lib/actions/locations.js +1 -1
  31. package/lib/actions/messages.js +1 -1
  32. package/lib/actions/notifications.js +1 -1
  33. package/lib/actions/payments.js +27 -26
  34. package/lib/actions/personas.d.ts +4 -4
  35. package/lib/actions/personas.js +1 -1
  36. package/lib/actions/posts.js +1 -1
  37. package/lib/actions/query.js +1 -1
  38. package/lib/actions/reactions.d.ts +6 -6
  39. package/lib/actions/reactions.js +1 -1
  40. package/lib/actions/rum.js +1 -1
  41. package/lib/actions/s3.d.ts +4 -4
  42. package/lib/actions/s3.js +22 -6
  43. package/lib/actions/search.js +1 -1
  44. package/lib/actions/sms.js +1 -1
  45. package/lib/actions/statistics.js +1 -1
  46. package/lib/actions/subscriptions.js +1 -1
  47. package/lib/actions/tags.d.ts +2 -2
  48. package/lib/actions/tags.js +1 -1
  49. package/lib/actions/users.d.ts +2 -2
  50. package/lib/actions/users.js +1 -1
  51. package/lib/actions/videoGeneration.d.ts +20 -0
  52. package/lib/actions/videoGeneration.js +32 -0
  53. package/lib/actions/videos.js +1 -1
  54. package/lib/adapters/arangoAdapter.js +1 -1
  55. package/lib/adapters/contentAdapter.js +1 -1
  56. package/lib/adapters/fileAdapter.js +1 -1
  57. package/lib/adapters/geminiGenerationAdapter.d.ts +34 -0
  58. package/lib/adapters/geminiGenerationAdapter.js +41 -0
  59. package/lib/adapters/higgsfieldAdapter.d.ts +120 -0
  60. package/lib/adapters/higgsfieldAdapter.js +131 -0
  61. package/lib/adapters/imageAdapter.js +1 -1
  62. package/lib/adapters/imageGenerationAdapter.d.ts +17 -0
  63. package/lib/adapters/imageGenerationAdapter.js +18 -0
  64. package/lib/adapters/index.d.ts +3 -0
  65. package/lib/adapters/index.js +4 -1
  66. package/lib/adapters/messageAdapter.js +1 -1
  67. package/lib/adapters/postAdapter.js +1 -1
  68. package/lib/adapters/reaktorAdapter.js +1 -1
  69. package/lib/adapters/tagAdapter.js +1 -1
  70. package/lib/adapters/userAdapter.d.ts +76 -1
  71. package/lib/adapters/userAdapter.js +1 -1
  72. package/lib/config.d.ts +19 -14
  73. package/lib/config.js +9 -1
  74. package/lib/constants/collections.js +1 -1
  75. package/lib/handlers/graphqlHandler.js +1 -1
  76. package/lib/index.d.ts +1 -0
  77. package/lib/index.js +2 -1
  78. package/lib/lambdas/actions/websockets.d.ts +5 -0
  79. package/lib/lambdas/actions/websockets.js +16 -1
  80. package/lib/lambdas/authorizer.js +1 -1
  81. package/lib/lambdas/connection.d.ts +2 -2
  82. package/lib/lambdas/connection.js +1 -1
  83. package/lib/lambdas/utils/message.js +1 -1
  84. package/lib/lambdas/utils/websocket.d.ts +4 -4
  85. package/lib/lambdas/utils/websocket.js +1 -1
  86. package/lib/mocks/conversation.js +1 -1
  87. package/lib/mocks/file.js +1 -1
  88. package/lib/mocks/group.js +1 -1
  89. package/lib/mocks/image.js +1 -1
  90. package/lib/mocks/post.js +1 -1
  91. package/lib/mocks/tag.js +1 -1
  92. package/lib/mocks/user.js +1 -1
  93. package/lib/mocks/video.js +1 -1
  94. package/lib/mutations/analytics/analytics.js +1 -1
  95. package/lib/mutations/content/content.js +15 -1
  96. package/lib/mutations/crm/crm.js +1 -1
  97. package/lib/mutations/events/events.js +1 -1
  98. package/lib/mutations/flags/flags.js +1 -1
  99. package/lib/mutations/groups/groups.js +1 -1
  100. package/lib/mutations/higgsfield/higgsfield.d.ts +1 -0
  101. package/lib/mutations/higgsfield/higgsfield.js +62 -0
  102. package/lib/mutations/images/images.js +10 -1
  103. package/lib/mutations/index.d.ts +2 -1
  104. package/lib/mutations/index.js +11 -2
  105. package/lib/mutations/locations/locations.js +1 -1
  106. package/lib/mutations/messages/messages.js +1 -1
  107. package/lib/mutations/personas/personas.js +1 -1
  108. package/lib/mutations/posts/posts.js +1 -1
  109. package/lib/mutations/reactions/reactions.js +1 -1
  110. package/lib/mutations/rum/rum.js +1 -1
  111. package/lib/mutations/statistics/statistics.js +1 -1
  112. package/lib/mutations/subscriptions/subscriptions.js +1 -1
  113. package/lib/mutations/tags/tags.js +1 -1
  114. package/lib/mutations/users/users.js +1 -1
  115. package/lib/mutations/videos/videos.js +24 -10
  116. package/lib/objectTypes/analytics.js +1 -1
  117. package/lib/objectTypes/app.js +1 -1
  118. package/lib/objectTypes/bankAccount.js +1 -1
  119. package/lib/objectTypes/connection.js +1 -1
  120. package/lib/objectTypes/content.js +1 -1
  121. package/lib/objectTypes/contentGeneration.d.ts +2 -0
  122. package/lib/objectTypes/contentGeneration.js +30 -0
  123. package/lib/objectTypes/conversation.js +1 -1
  124. package/lib/objectTypes/creditCard.js +1 -1
  125. package/lib/objectTypes/crm.js +1 -1
  126. package/lib/objectTypes/document.js +1 -1
  127. package/lib/objectTypes/error.js +1 -1
  128. package/lib/objectTypes/event.js +1 -1
  129. package/lib/objectTypes/external.js +1 -1
  130. package/lib/objectTypes/file.js +1 -1
  131. package/lib/objectTypes/filter.js +1 -1
  132. package/lib/objectTypes/flag.js +1 -1
  133. package/lib/objectTypes/group.js +1 -1
  134. package/lib/objectTypes/higgsfield.d.ts +5 -0
  135. package/lib/objectTypes/higgsfield.js +149 -0
  136. package/lib/objectTypes/iapSubscription.js +1 -1
  137. package/lib/objectTypes/image.js +1 -1
  138. package/lib/objectTypes/imageGeneration.d.ts +2 -0
  139. package/lib/objectTypes/imageGeneration.js +33 -0
  140. package/lib/objectTypes/index.d.ts +2 -0
  141. package/lib/objectTypes/index.js +3 -1
  142. package/lib/objectTypes/location.js +1 -1
  143. package/lib/objectTypes/message.js +1 -1
  144. package/lib/objectTypes/passcode.js +1 -1
  145. package/lib/objectTypes/persona.d.ts +37 -2
  146. package/lib/objectTypes/persona.js +1 -1
  147. package/lib/objectTypes/plan.js +1 -1
  148. package/lib/objectTypes/post.js +1 -1
  149. package/lib/objectTypes/query.js +1 -1
  150. package/lib/objectTypes/reaction.js +1 -1
  151. package/lib/objectTypes/relation.js +1 -1
  152. package/lib/objectTypes/rum.js +1 -1
  153. package/lib/objectTypes/search.js +1 -1
  154. package/lib/objectTypes/statistics.js +1 -1
  155. package/lib/objectTypes/subscription.js +1 -1
  156. package/lib/objectTypes/tag.js +1 -1
  157. package/lib/objectTypes/user.js +1 -1
  158. package/lib/objectTypes/video.js +1 -1
  159. package/lib/objectTypes/videoGeneration.d.ts +2 -0
  160. package/lib/objectTypes/videoGeneration.js +31 -0
  161. package/lib/queries/analytics/analytics.js +1 -1
  162. package/lib/queries/content/content.js +1 -1
  163. package/lib/queries/crm/crm.js +1 -1
  164. package/lib/queries/events/events.js +1 -1
  165. package/lib/queries/flags/flags.js +1 -1
  166. package/lib/queries/groups/groups.js +1 -1
  167. package/lib/queries/higgsfield/higgsfield.d.ts +1 -0
  168. package/lib/queries/higgsfield/higgsfield.js +22 -0
  169. package/lib/queries/images/images.js +1 -1
  170. package/lib/queries/index.d.ts +2 -1
  171. package/lib/queries/index.js +7 -2
  172. package/lib/queries/locations/locations.js +1 -1
  173. package/lib/queries/messages/messages.js +1 -1
  174. package/lib/queries/personas/personas.js +1 -1
  175. package/lib/queries/posts/posts.js +1 -1
  176. package/lib/queries/query/query.js +1 -1
  177. package/lib/queries/reactions/reactions.js +1 -1
  178. package/lib/queries/statistics/statistics.js +1 -1
  179. package/lib/queries/subscriptions/subscriptions.js +1 -1
  180. package/lib/queries/tags/tags.js +1 -1
  181. package/lib/queries/users/users.js +1 -1
  182. package/lib/queries/videos/videos.js +1 -1
  183. package/lib/templates/email/layout.js +1 -1
  184. package/lib/templates/email/passwordForgot.js +1 -1
  185. package/lib/templates/email/passwordRecovery.js +1 -1
  186. package/lib/templates/email/verifyEmail.js +1 -1
  187. package/lib/templates/email/welcome.js +1 -1
  188. package/lib/templates/sms/passwordForgot.js +1 -1
  189. package/lib/templates/sms/passwordRecovery.js +1 -1
  190. package/lib/templates/sms/verifyEmail.js +1 -1
  191. package/lib/templates/sms/verifyPhone.js +1 -1
  192. package/lib/templates/sms/welcome.js +1 -1
  193. package/lib/types/analytics.types.d.ts +16 -16
  194. package/lib/types/analytics.types.js +1 -1
  195. package/lib/types/apps.types.d.ts +4 -4
  196. package/lib/types/apps.types.js +1 -1
  197. package/lib/types/arangodb.types.d.ts +20 -20
  198. package/lib/types/arangodb.types.js +1 -1
  199. package/lib/types/auth.types.js +1 -1
  200. package/lib/types/connections.types.d.ts +2 -2
  201. package/lib/types/connections.types.js +1 -1
  202. package/lib/types/content.types.d.ts +6 -6
  203. package/lib/types/content.types.js +1 -1
  204. package/lib/types/conversations.types.d.ts +2 -2
  205. package/lib/types/conversations.types.js +1 -1
  206. package/lib/types/crm.types.d.ts +30 -30
  207. package/lib/types/crm.types.js +1 -1
  208. package/lib/types/email.types.d.ts +2 -2
  209. package/lib/types/email.types.js +1 -1
  210. package/lib/types/error.types.d.ts +1 -0
  211. package/lib/types/error.types.js +2 -1
  212. package/lib/types/files.types.d.ts +2 -2
  213. package/lib/types/files.types.js +1 -1
  214. package/lib/types/flags.types.d.ts +8 -8
  215. package/lib/types/flags.types.js +1 -1
  216. package/lib/types/google.types.js +1 -1
  217. package/lib/types/groups.types.d.ts +2 -2
  218. package/lib/types/groups.types.js +1 -1
  219. package/lib/types/images.types.d.ts +2 -2
  220. package/lib/types/images.types.js +1 -1
  221. package/lib/types/index.js +1 -1
  222. package/lib/types/locations.types.d.ts +2 -2
  223. package/lib/types/locations.types.js +1 -1
  224. package/lib/types/messages.types.d.ts +2 -2
  225. package/lib/types/messages.types.js +1 -1
  226. package/lib/types/notifications.types.js +1 -1
  227. package/lib/types/payments.types.d.ts +14 -14
  228. package/lib/types/payments.types.js +1 -1
  229. package/lib/types/personas.types.d.ts +2 -2
  230. package/lib/types/personas.types.js +1 -1
  231. package/lib/types/posts.types.d.ts +2 -2
  232. package/lib/types/posts.types.js +1 -1
  233. package/lib/types/rum.types.d.ts +6 -6
  234. package/lib/types/rum.types.js +1 -1
  235. package/lib/types/statistics.types.js +1 -1
  236. package/lib/types/tags.types.d.ts +4 -4
  237. package/lib/types/tags.types.js +1 -1
  238. package/lib/types/users.types.d.ts +2 -2
  239. package/lib/types/users.types.js +1 -1
  240. package/lib/types/videos.types.d.ts +2 -2
  241. package/lib/types/videos.types.js +1 -1
  242. package/lib/types/websockets.types.d.ts +4 -4
  243. package/lib/types/websockets.types.js +1 -1
  244. package/lib/upload.js +1 -1
  245. package/lib/utils/adapterUtils.js +1 -1
  246. package/lib/utils/analyticsUtils.js +1 -1
  247. package/lib/utils/appContext.js +1 -1
  248. package/lib/utils/aqlHelpers.js +1 -1
  249. package/lib/utils/arangodbUtils.js +1 -1
  250. package/lib/utils/authUtils.js +1 -1
  251. package/lib/utils/awsUtils.js +1 -1
  252. package/lib/utils/collectionRegistry.d.ts +2 -2
  253. package/lib/utils/collectionRegistry.js +1 -1
  254. package/lib/utils/contextUtils.js +1 -1
  255. package/lib/utils/dbI18n.example.js +1 -1
  256. package/lib/utils/dbI18n.js +1 -1
  257. package/lib/utils/googleTranslate.js +1 -1
  258. package/lib/utils/graphqlUtils.js +1 -1
  259. package/lib/utils/imageUtils.js +1 -1
  260. package/lib/utils/index.d.ts +3 -0
  261. package/lib/utils/index.js +4 -1
  262. package/lib/utils/languageDetection.js +1 -1
  263. package/lib/utils/localeUtils.example.js +1 -1
  264. package/lib/utils/localeUtils.js +1 -1
  265. package/lib/utils/mediaAccess.d.ts +5 -0
  266. package/lib/utils/mediaAccess.js +57 -0
  267. package/lib/utils/middlewareUtils.js +1 -1
  268. package/lib/utils/nodeRealtime.d.ts +14 -0
  269. package/lib/utils/nodeRealtime.js +84 -0
  270. package/lib/utils/opaqueToken.d.ts +4 -0
  271. package/lib/utils/opaqueToken.js +7 -0
  272. package/lib/utils/queryBuilder.js +1 -1
  273. package/lib/utils/schemaUtils.js +1 -1
  274. package/lib/utils/sessionUtils.js +1 -1
  275. package/lib/utils/stripeUtils.d.ts +1 -1
  276. package/lib/utils/stripeUtils.js +2 -2
  277. package/lib/utils/stripeUtils.ts.bak +12 -0
  278. package/lib/utils/templateUtils.js +1 -1
  279. package/lib/utils/testUtils.js +1 -1
  280. package/lib/utils/translationQueue.example.js +1 -1
  281. package/lib/utils/translationQueue.js +1 -1
  282. package/lib/videoProcessing.js +1 -1
  283. package/package.json +26 -25
package/README.md CHANGED
@@ -15,7 +15,9 @@ A powerful GraphQL API framework built with TypeScript, ArangoDB, and AWS Lambda
15
15
  - **TypeScript** - Full type safety throughout the codebase
16
16
  - **Modular Architecture** - Clean separation of concerns with actions, adapters, and utilities
17
17
  - **Zod Validation** - Runtime type checking and data validation
18
- - **JWT Authentication** - Secure session management
18
+ - **Authentication** - Existing JWT sessions plus opt-in opaque bearer-token and scoped media-grant helpers
19
+ - **Generation** - Explicit OpenAI/Claude/Gemini text, Gemini/Higgsfield/OpenAI images, and Gemini/Higgsfield video
20
+ - **Node realtime** - First-frame WebSocket authentication and session revalidation
19
21
  - **AWS Lambda Ready** - Serverless deployment support
20
22
  - **Comprehensive Testing** - Jest-based testing with utilities
21
23
  - **Internationalization** - Database-driven i18n system
@@ -1451,3 +1453,62 @@ For comprehensive guides and detailed documentation, see:
1451
1453
  Reaktor is proprietary commercial software. A valid commercial agreement with
1452
1454
  Nitrogen Labs, Inc. is required to use, copy, modify, or distribute this
1453
1455
  package. See [LICENSE](./LICENSE) for the governing terms.
1456
+
1457
+ ## Generation, sessions, and realtime
1458
+
1459
+ See the [complete generation and sessions guide](docs/GENERATION.md) for the provider matrix, server configuration, results, storage, rejection handling, and release policy.
1460
+
1461
+ ### Provider-driven content generation
1462
+
1463
+ `generateContent(input, config?)` submits a single server-side request through Rip-Hunter to
1464
+ OpenAI (`openai`), Anthropic (`claude`), or Google (`gemini`). Supply `prompt` and `provider`,
1465
+ with optional `model`, `system`, and `maxTokens`. Configuration accepts `openaiKey`,
1466
+ `claudeKey`, and `geminiKey` plus per-provider model defaults; omitted configuration is read
1467
+ from `Config.get('contentGeneration')`. Keep these credentials on the server.
1468
+
1469
+ The existing content GraphQL mutations expose `contents.generateContent(input:
1470
+ ContentGenerationInput!)`, returning text and source links. They require an authenticated
1471
+ context. Applications with credits or durable jobs should call the server action from their
1472
+ own authorized worker instead of exposing immediate submissions.
1473
+
1474
+ The action performs no automatic persistence or retries. `ContentGenerationRejectedError`
1475
+ means a confirmed rejection; an ambiguous or partial response throws an ordinary error so
1476
+ applications can retain their reservation and reconcile. Gemini also supports explicit
1477
+ image output and search inputs for server-side workflows.
1478
+
1479
+ Existing `s3Get`, `s3Put`, and `s3GetSignedUrl` accept an optional `S3Client` for applications
1480
+ that configure isolated storage connections. Omit it to keep the existing Config-based
1481
+ behavior. Object ownership, account prefixes, metadata and graph relationships remain the
1482
+ responsibility of the calling application.
1483
+
1484
+ ### Reusable image generation and Node realtime
1485
+
1486
+ `generateImage(context, {provider: 'openai', prompt: 'A paper moon'})` returns verified PNG base64 output; `provider: 'higgsfield'` routes text-only requests to Soul and image references to Marketing Studio. The same action is exposed as `images.generateImage(input: ImageGenerationInput!)`. Configure `openai.apiKey` and optionally `openai.imageModel` with Reaktor Config, or pass server configuration to `generateOpenAIImage`. Higgsfield continues using its existing Config keys and action exports. All provider HTTP calls use Rip-Hunter.
1487
+
1488
+ `ImageGenerationRejectedError` indicates a confirmed provider rejection. Other failures may have an unknown paid outcome: applications must reconcile rather than automatically submit again. Applications own authorization, durable jobs, accounting, and saving generated media; the immediate shared action does not implement product billing policy.
1489
+
1490
+ `attachAuthenticatedRealtime(server, options)` provides first-frame token authentication, origin checks, session revalidation before delivery, periodic revocation checks, subscription cleanup, and server shutdown for Node HTTP servers. Supply `identify`, `subscribe`, `initialEvent`, `path`, and `allowedOrigins`; `validateHost` is optional application policy. Existing serverless WebSocket actions remain available.
1491
+
1492
+ `createOpaqueToken`, `hashOpaqueToken`, `isOpaqueToken`, and `readOpaqueBearerToken` support opaque sessions. `createMediaAccess` issues short-lived encrypted grants bound to an exact path. A grant is only a credential carrier: callers must still validate the underlying session and resource ownership on every read. Its default key is process-local, so grants are invalidated when the process restarts.
1493
+
1494
+ ### Provider-driven video generation
1495
+
1496
+ `generateVideo(context, input, config?, webhookUrl?)` routes to Higgsfield adapters or Gemini Veo.
1497
+ Provider resolution is `input.provider`, then `config.provider` (or the context/global
1498
+ `videoGeneration.provider` setting), then undefined. Missing or unsupported providers fail before
1499
+ submission. `imageUrl` uses image-to-video; image, audio or video reference arrays select
1500
+ reference-to-video and keep its existing validation requirements. Results include provider,
1501
+ requestId, status (`queued`), statusUrl and optional cancelUrl. The authenticated GraphQL
1502
+ operation is `videos.generateVideo(input: VideoGenerationInput!)`. Durable jobs, webhook
1503
+ verification, storage and billing remain application-owned.
1504
+
1505
+ Gemini is available through `generateContent` (text), `generateImage` (native images),
1506
+ and `generateVideo` (Veo text-to-video). Select `provider: 'gemini'` explicitly;
1507
+ there is no default generation provider. Configure server-side keys through
1508
+ `contentGeneration.geminiKey` and video model/key overrides through `videoGeneration`.
1509
+ Veo jobs return an operation identifier; `getGeminiVideoStatus` polls that identifier
1510
+ and `downloadGeminiVideo` retrieves authenticated MP4 bytes for object storage.
1511
+ The initial Veo adapter accepts 4, 6, or 8 seconds, with 1080p requiring 8 seconds;
1512
+ reference inputs are rejected. Helpers perform no database or filesystem writes.
1513
+ Keep durable jobs and reconciliation in the application: unknown submission outcomes
1514
+ must not be automatically retried. Gemini image results include `mimeType` for PNG/JPEG.
@@ -0,0 +1,63 @@
1
+ # Generation, sessions, and realtime
2
+
3
+ Reaktor provides reusable server actions and authenticated GraphQL mutations. Applications supply authorization, durable jobs, idempotent credit accounting, object ownership, and reconciliation. Provider credentials stay on the server; provider HTTP requests use Rip-Hunter.
4
+
5
+ ## Provider matrix
6
+
7
+ | Operation | Explicit providers | GraphQL mutation |
8
+ | --- | --- | --- |
9
+ | Text | `claude`, `gemini`, `openai` | `contents.generateContent` |
10
+ | Images | `gemini`, `higgsfield`, `openai` | `images.generateImage` |
11
+ | Video | `gemini`, `higgsfield` | `videos.generateVideo` |
12
+
13
+ There is no implicit provider. Video input can override an explicitly configured `videoGeneration.provider`. These mutations submit immediately; applications with a paid job queue should call the same server actions from their authorized worker.
14
+
15
+ ```ts
16
+ import {generateContent, generateImage, generateVideo} from '@nlabs/reaktor';
17
+
18
+ const text = await generateContent({prompt: 'Write a scene', provider: 'claude'});
19
+ const image = await generateImage(context, {prompt: 'A paper moon', provider: 'openai'});
20
+ const video = await generateVideo(context, {
21
+ aspectRatio: '16:9', duration: 8, prompt: 'Clouds above a quiet ocean',
22
+ provider: 'gemini', resolution: '720p'
23
+ });
24
+ ```
25
+
26
+ `context` is the caller's authenticated `ApiContext`. Text returns generated text and source links. OpenAI/Gemini image results have `status: 'completed'` and `imageBase64`; Gemini includes PNG/JPEG `mimeType`, while OpenAI returns validated PNG bytes. Higgsfield image and video submissions return a `requestId`, `status: 'queued'`, and polling metadata. Gemini video returns an operation identifier for subsequent polling. Submission success is not evidence that a queued video has completed.
27
+
28
+ ## Server configuration and capabilities
29
+
30
+ | Provider | Reaktor configuration | Supported initial media path |
31
+ | --- | --- | --- |
32
+ | OpenAI | `contentGeneration.openaiKey` / `openaiModel` for text; `openai.apiKey` / `openai.imageModel` for images | Text-to-image, PNG, low/medium/high quality, square/landscape/portrait sizes |
33
+ | Claude | `contentGeneration.claudeKey` / `claudeModel` | Text generation |
34
+ | Gemini | `contentGeneration.geminiKey`, `geminiModel`, `geminiImageModel`; `videoGeneration.geminiKey` / `geminiModel` overrides for video | Text-to-image PNG/JPEG; Veo text-to-video |
35
+ | Higgsfield | Existing Higgsfield configuration and adapters | Soul text-to-image, Marketing Studio image references, Seedance image/reference-to-video |
36
+
37
+ Configuration names in this table are object paths, not automatically loaded environment variables. Applications map their environment to Reaktor Config or pass the exported action's config argument. `generateOpenAIImage` and `generateGeminiImage` accept `{key, model}`; `generateContent` accepts the provider keys/model defaults directly.
38
+
39
+ Gemini video accepts 4, 6, or 8 seconds at 720p or 1080p; 1080p requires 8 seconds. The initial Gemini media adapters reject reference images and other unsupported input fields. OpenAI reference editing is not implemented. Validate inputs before reserving credits.
40
+
41
+ Use `getGeminiVideoStatus(requestId, {key})` to poll an existing operation. When it succeeds, `downloadGeminiVideo(mediaUrl, {key})` retrieves bounded, validated MP4 bytes with provider authentication. Keep these URLs and keys server-side; save the bytes in object storage. Downloads restrict credential forwarding and validate redirects. Helpers do not persist jobs, assets, or accounting.
42
+
43
+ ## Failure and storage contract
44
+
45
+ `ContentGenerationRejectedError`, `ImageGenerationRejectedError`, and `GeminiGenerationRejectedError` identify confirmed rejections for their respective action paths. An unknown submission outcome, timeout, partial response, or failed retention can still represent a paid request. Preserve the reservation and reconcile that request; never blindly repeat a paid POST. Polling or delivery retries must not resubmit generation.
46
+
47
+ Use `s3Put`, `s3Get`, and `s3GetSignedUrl` with their optional `S3Client` parameter for application-specific connections, or omit it for Config-based behavior. Commit metadata and graph edges in ArangoDB only after retaining the media. Persist an output pointer before retrying settlement so recovery does not download or bill twice.
48
+
49
+ ## Opaque sessions and private media
50
+
51
+ `createOpaqueToken`, `hashOpaqueToken`, `isOpaqueToken`, and `readOpaqueBearerToken` are opt-in primitives alongside existing JWT authentication. Store the token hash and expiry server-side; return the raw token only to the authenticated client. The application owns expiry checks, revocation, session persistence, and resource authorization.
52
+
53
+ `createMediaAccess` issues encrypted, short-lived grants bound to an exact media/export path and an underlying session. Validate both session and ownership for every read. Its default encryption key is process-local: restarting invalidates existing grants. This helper does not currently accept a shared key; multi-process deployments need a shared grant service or another application-owned delivery mechanism.
54
+
55
+ ## Node WebSocket integration
56
+
57
+ `attachAuthenticatedRealtime(server, options)` attaches first-frame authentication to a Node HTTP server. Supply `identify`, `subscribe`, `initialEvent`, `path`, and `allowedOrigins`; `validateHost` is optional application policy. The helper revalidates sessions before delivery and periodically while connected, cleans subscriptions up, and closes its sockets on shutdown. Existing serverless WebSocket actions remain available.
58
+
59
+ Publish account-scoped events only after database commit. Clients should refresh their snapshot after connection/reconnection and update ArkhamJS state before notifying listeners. Socket reconnects must never replay paid submissions. MetropolisJS supports this protocol with `authentication: 'message'` and a matching authentication-frame serializer.
60
+
61
+ ## Release policy
62
+
63
+ Publish only plain `major.minor.patch` versions. Build with Lex, run tests and package verification, and inspect `npm pack --dry-run` before release. The `publish:*` convenience scripts also push Git branches/tags; publishing an audited tarball with `npm publish <archive> --access public` does not implicitly push a dirty working tree.
@@ -536,4 +536,4 @@ export const getAnalyticsDashboard = async (context, analyticsIdInput, rangeDays
536
536
  };
537
537
  };
538
538
 
539
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL2FuYWx5dGljcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNi1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuaW1wb3J0IHtcbiAgQ3JlYXRlQXBwTW9uaXRvckNvbW1hbmQsXG4gIEdldEFwcE1vbml0b3JDb21tYW5kLFxuICBHZXRBcHBNb25pdG9yRGF0YUNvbW1hbmQsXG4gIFJVTUNsaWVudFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtcnVtJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcmFuZG9tVVVJRH0gZnJvbSAnY3J5cHRvJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQge0NPTExFQ1RJT05TfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge1VzZXJFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2lzQWRtaW5Vc2VyfSBmcm9tICcuLi91dGlscy9zZXNzaW9uVXRpbHMuanMnO1xuaW1wb3J0IHthZGRJdGVtLCBnZXRJdGVtQnksIGdldExpc3RCeSwgdXBkYXRlSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcblxuaW1wb3J0IHR5cGUge0F3c0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB0eXBlIHtBcHBUeXBlfSBmcm9tICcuLi90eXBlcy9hcHBzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQW5hbHl0aWNzQ29uZmlndXJhdGlvblR5cGUsXG4gIEFuYWx5dGljc0Rhc2hib2FyZFR5cGUsXG4gIEFuYWx5dGljc0V2ZW50VHlwZSxcbiAgQW5hbHl0aWNzVHlwZSxcbiAgQ3JlYXRlQW5hbHl0aWNzTW9uaXRvcklucHV0VHlwZVxufSBmcm9tICcuLi90eXBlcy9hbmFseXRpY3MudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1Nlc3Npb259IGZyb20gJy4uL3V0aWxzL3Nlc3Npb25VdGlscy5qcyc7XG5cbmNvbnN0IE1BWF9BUFBfSURfTEVOR1RIID0gMTI4O1xuY29uc3QgTUFYX0RPTUFJTl9MRU5HVEggPSAyNTM7XG5jb25zdCBNQVhfTU9OSVRPUl9OQU1FX0xFTkdUSCA9IDI1NTtcbmNvbnN0IE1BWF9SVU1fUEFHRVMgPSAxMDtcbmNvbnN0IE1BWF9SVU1fUkVTVUxUUyA9IDEwMDtcbmNvbnN0IFZBTElEX1JBTkdFX0RBWVMgPSBuZXcgU2V0KFsxLCA3LCAzMF0pO1xuY29uc3QgY29sbGVjdGlvbkluaXRpYWxpemF0aW9uID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8dm9pZD4+KCk7XG5cbmNvbnN0IG5vcm1hbGl6ZVRleHQgPSAodmFsdWU6IHVua25vd24sIG1heExlbmd0aDogbnVtYmVyKTogc3RyaW5nID0+XG4gIFN0cmluZyh2YWx1ZSB8fCAnJykudHJpbSgpLnNsaWNlKDAsIG1heExlbmd0aCk7XG5cbmNvbnN0IG5vcm1hbGl6ZURvbWFpbiA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiBub3JtYWxpemVUZXh0KHZhbHVlLCBNQVhfRE9NQUlOX0xFTkdUSClcbiAgLnJlcGxhY2UoL15odHRwcz86XFwvXFwvL2ksICcnKVxuICAuc3BsaXQoJy8nKVswXVxuICAuc3BsaXQoJzonKVswXVxuICAudG9Mb3dlckNhc2UoKTtcblxuY29uc3Qgbm9ybWFsaXplTW9uaXRvck5hbWUgPSAodmFsdWU6IHVua25vd24sIGFwcElkOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgbm9ybWFsaXplVGV4dCh2YWx1ZSB8fCBhcHBJZCwgTUFYX01PTklUT1JfTkFNRV9MRU5HVEgpLnJlcGxhY2UoL1teYS16QS1aMC05LV9dL2csICctJyk7XG5cbmNvbnN0IGdldERvY3VtZW50S2V5ID0gKGFwcElkOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGFwcElkKS5kaWdlc3QoJ2hleCcpO1xuXG5jb25zdCByZXF1aXJlQWRtaW4gPSAoY29udGV4dDogQXBpQ29udGV4dCk6IHZvaWQgPT4ge1xuICBpZighaXNBZG1pblVzZXIoY29udGV4dC5zZXNzaW9uIGFzIFNlc3Npb24pKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcihFcnJvclR5cGVzLklOVkFMSURfU0VTU0lPTik7XG4gIH1cbn07XG5cbmNvbnN0IHJlcXVpcmVTZXNzaW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBTZXNzaW9uID0+IHtcbiAgY29uc3Qgc2Vzc2lvbiA9IGNvbnRleHQuc2Vzc2lvbiBhcyBTZXNzaW9uO1xuXG4gIGlmKCFzZXNzaW9uPy51c2VySWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9TRVNTSU9OKTtcbiAgfVxuXG4gIHJldHVybiBzZXNzaW9uO1xufTtcblxuY29uc3QgaW5pdGlhbGl6ZUFuYWx5dGljc0NvbGxlY3Rpb24gPSBhc3luYyAoZGF0YWJhc2VOYW1lPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGNhY2hlS2V5ID0gZGF0YWJhc2VOYW1lIHx8ICdyZWFrdG9yJztcbiAgY29uc3QgZXhpc3RpbmdJbml0aWFsaXphdGlvbiA9IGNvbGxlY3Rpb25Jbml0aWFsaXphdGlvbi5nZXQoY2FjaGVLZXkpO1xuXG4gIGlmKGV4aXN0aW5nSW5pdGlhbGl6YXRpb24pIHtcbiAgICByZXR1cm4gZXhpc3RpbmdJbml0aWFsaXphdGlvbjtcbiAgfVxuXG4gIGNvbnN0IGluaXRpYWxpemF0aW9uID0gKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGRhdGFiYXNlTmFtZSk7XG4gICAgY29uc3QgY29sbGVjdGlvbiA9IGRhdGFiYXNlLmNvbGxlY3Rpb24oQ09MTEVDVElPTlMuQU5BTFlUSUNTKTtcblxuICAgIGlmKCFhd2FpdCBjb2xsZWN0aW9uLmV4aXN0cygpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBkYXRhYmFzZS5jcmVhdGVDb2xsZWN0aW9uKENPTExFQ1RJT05TLkFOQUxZVElDUyk7XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIGlmKCFhd2FpdCBjb2xsZWN0aW9uLmV4aXN0cygpKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBjb2xsZWN0aW9uLmVuc3VyZUluZGV4KHtmaWVsZHM6IFsnYW5hbHl0aWNzSWQnXSwgdHlwZTogJ3BlcnNpc3RlbnQnLCB1bmlxdWU6IHRydWV9KTtcbiAgICBhd2FpdCBjb2xsZWN0aW9uLmVuc3VyZUluZGV4KHtmaWVsZHM6IFsnYXBwSWQnXSwgdHlwZTogJ3BlcnNpc3RlbnQnLCB1bmlxdWU6IHRydWV9KTtcbiAgfSkoKTtcblxuICBjb2xsZWN0aW9uSW5pdGlhbGl6YXRpb24uc2V0KGNhY2hlS2V5LCBpbml0aWFsaXphdGlvbik7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBpbml0aWFsaXphdGlvbjtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGNvbGxlY3Rpb25Jbml0aWFsaXphdGlvbi5kZWxldGUoY2FjaGVLZXkpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5jb25zdCBnZXRSdW1DbGllbnQgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFJVTUNsaWVudCA9PiB7XG4gIGNvbnN0IGF3c0NvbmZpZzogQXdzQ29uZmlnID0gY29udGV4dC5jb25maWc/LmF3cyB8fCBDb25maWcuZ2V0PEF3c0NvbmZpZz4oJ2F3cycsIHt9KTtcbiAgY29uc3Qge2FjY2Vzc0tleUlkLCBzZWNyZXRBY2Nlc3NLZXksIHNlc3Npb25Ub2tlbn0gPSBhd3NDb25maWcuY3JlZGVudGlhbHMgfHwge307XG4gIGNvbnN0IHVzZXNSdW50aW1lQ3JlZGVudGlhbHMgPSBCb29sZWFuKFxuICAgIHByb2Nlc3MuZW52LkFXU19TRVNTSU9OX1RPS0VOICYmXG4gICAgYWNjZXNzS2V5SWQgPT09IHByb2Nlc3MuZW52LkFXU19BQ0NFU1NfS0VZX0lEICYmXG4gICAgc2VjcmV0QWNjZXNzS2V5ID09PSBwcm9jZXNzLmVudi5BV1NfU0VDUkVUX0FDQ0VTU19LRVlcbiAgKTtcbiAgY29uc3QgY3JlZGVudGlhbHMgPSBhY2Nlc3NLZXlJZCAmJiBzZWNyZXRBY2Nlc3NLZXkgJiYgIXVzZXNSdW50aW1lQ3JlZGVudGlhbHMgPyB7XG4gICAgYWNjZXNzS2V5SWQsXG4gICAgc2VjcmV0QWNjZXNzS2V5LFxuICAgIC4uLihzZXNzaW9uVG9rZW4gPyB7c2Vzc2lvblRva2VufSA6IHt9KVxuICB9IDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiBuZXcgUlVNQ2xpZW50KHtcbiAgICAuLi4oY3JlZGVudGlhbHMgPyB7Y3JlZGVudGlhbHN9IDoge30pLFxuICAgIC4uLihhd3NDb25maWcucmVnaW9uID8ge3JlZ2lvbjogYXdzQ29uZmlnLnJlZ2lvbn0gOiB7fSlcbiAgfSk7XG59O1xuXG5jb25zdCBmaW5kQXdzTW9uaXRvciA9IGFzeW5jIChcbiAgY2xpZW50OiBSVU1DbGllbnQsXG4gIG1vbml0b3JOYW1lOiBzdHJpbmdcbik6IFByb21pc2U8e2RvbWFpbj86IHN0cmluZzsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nfSB8IG51bGw+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBHZXRBcHBNb25pdG9yQ29tbWFuZCh7TmFtZTogbW9uaXRvck5hbWV9KSk7XG4gICAgY29uc3QgbW9uaXRvcklkID0gbm9ybWFsaXplVGV4dChyZXNwb25zZS5BcHBNb25pdG9yPy5JZCwgMzYpO1xuXG4gICAgcmV0dXJuIG1vbml0b3JJZCA/IHtcbiAgICAgIGRvbWFpbjogbm9ybWFsaXplRG9tYWluKHJlc3BvbnNlLkFwcE1vbml0b3I/LkRvbWFpbiksXG4gICAgICBpZDogbW9uaXRvcklkLFxuICAgICAgbmFtZTogbm9ybWFsaXplVGV4dChyZXNwb25zZS5BcHBNb25pdG9yPy5OYW1lIHx8IG1vbml0b3JOYW1lLCBNQVhfTU9OSVRPUl9OQU1FX0xFTkdUSClcbiAgICB9IDogbnVsbDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKChlcnJvciBhcyB7bmFtZT86IHN0cmluZ30pLm5hbWUgPT09ICdSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IGZpbmRPckNyZWF0ZUF3c01vbml0b3IgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGFwcElkOiBzdHJpbmcsXG4gIGRvbWFpbjogc3RyaW5nLFxuICBtb25pdG9yTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPHtkb21haW46IHN0cmluZzsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nfT4gPT4ge1xuICBjb25zdCBjbGllbnQgPSBnZXRSdW1DbGllbnQoY29udGV4dCk7XG4gIGNvbnN0IGV4aXN0aW5nTW9uaXRvciA9IGF3YWl0IGZpbmRBd3NNb25pdG9yKGNsaWVudCwgbW9uaXRvck5hbWUpO1xuXG4gIGlmKGV4aXN0aW5nTW9uaXRvcikge1xuICAgIHJldHVybiB7XG4gICAgICBkb21haW46IGV4aXN0aW5nTW9uaXRvci5kb21haW4gfHwgZG9tYWluLFxuICAgICAgaWQ6IGV4aXN0aW5nTW9uaXRvci5pZCxcbiAgICAgIG5hbWU6IGV4aXN0aW5nTW9uaXRvci5uYW1lXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IENyZWF0ZUFwcE1vbml0b3JDb21tYW5kKHtcbiAgICBDdXN0b21FdmVudHM6IHtTdGF0dXM6ICdFTkFCTEVEJ30sXG4gICAgQ3dMb2dFbmFibGVkOiBmYWxzZSxcbiAgICBEb21haW46IGRvbWFpbixcbiAgICBOYW1lOiBtb25pdG9yTmFtZSxcbiAgICBQbGF0Zm9ybTogJ1dlYicsXG4gICAgVGFnczoge2FwcElkLCBtYW5hZ2VkQnk6ICdyZWFrdG9yJ31cbiAgfSkpO1xuICBjb25zdCBtb25pdG9ySWQgPSBub3JtYWxpemVUZXh0KHJlc3BvbnNlLklkLCAzNik7XG5cbiAgaWYoIW1vbml0b3JJZCkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ2ludmFsaWRfcnVtX21vbml0b3InKTtcbiAgfVxuXG4gIHJldHVybiB7ZG9tYWluLCBpZDogbW9uaXRvcklkLCBuYW1lOiBtb25pdG9yTmFtZX07XG59O1xuXG5jb25zdCBwYXJzZU1vbml0b3JJbnB1dCA9IChcbiAgaW5wdXQ6IENyZWF0ZUFuYWx5dGljc01vbml0b3JJbnB1dFR5cGVcbik6IHthcHBJZDogc3RyaW5nOyBhcHBOYW1lOiBzdHJpbmc7IGRvbWFpbjogc3RyaW5nOyBtb25pdG9yTmFtZTogc3RyaW5nfSA9PiB7XG4gIGNvbnN0IGFwcElkID0gbm9ybWFsaXplVGV4dChpbnB1dD8uYXBwSWQsIE1BWF9BUFBfSURfTEVOR1RIKTtcbiAgY29uc3QgYXBwTmFtZSA9IG5vcm1hbGl6ZVRleHQoaW5wdXQ/LmFwcE5hbWUgfHwgaW5wdXQ/Lm1vbml0b3JOYW1lIHx8IGFwcElkLCBNQVhfTU9OSVRPUl9OQU1FX0xFTkdUSCk7XG4gIGNvbnN0IGRvbWFpbiA9IG5vcm1hbGl6ZURvbWFpbihpbnB1dD8uZG9tYWluKTtcbiAgY29uc3QgbW9uaXRvck5hbWUgPSBub3JtYWxpemVNb25pdG9yTmFtZShpbnB1dD8ubW9uaXRvck5hbWUsIGFwcElkKTtcblxuICBpZighYXBwSWQgfHwgIWRvbWFpbiB8fCAhbW9uaXRvck5hbWUpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BUkdVTUVOVFMpO1xuICB9XG5cbiAgcmV0dXJuIHthcHBJZCwgYXBwTmFtZSwgZG9tYWluLCBtb25pdG9yTmFtZX07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QW5hbHl0aWNzQnlBcHBJZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgYXBwSWRJbnB1dDogc3RyaW5nXG4pOiBQcm9taXNlPEFuYWx5dGljc1R5cGUgfCBudWxsPiA9PiB7XG4gIHJlcXVpcmVBZG1pbihjb250ZXh0KTtcbiAgY29uc3QgYXBwSWQgPSBub3JtYWxpemVUZXh0KGFwcElkSW5wdXQsIE1BWF9BUFBfSURfTEVOR1RIKTtcblxuICBpZighYXBwSWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BUkdVTUVOVFMpO1xuICB9XG5cbiAgYXdhaXQgaW5pdGlhbGl6ZUFuYWx5dGljc0NvbGxlY3Rpb24oY29udGV4dC5kYXRhYmFzZU5hbWUpO1xuICByZXR1cm4gZ2V0SXRlbUJ5PEFuYWx5dGljc1R5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLkFOQUxZVElDUywge2FwcElkfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QW5hbHl0aWNzQ29uZmlndXJhdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgYXBwSWRJbnB1dDogc3RyaW5nXG4pOiBQcm9taXNlPEFuYWx5dGljc0NvbmZpZ3VyYXRpb25UeXBlIHwgbnVsbD4gPT4ge1xuICBjb25zdCBhcHBJZCA9IG5vcm1hbGl6ZVRleHQoYXBwSWRJbnB1dCwgTUFYX0FQUF9JRF9MRU5HVEgpO1xuXG4gIGlmKCFhcHBJZCkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FSR1VNRU5UUyk7XG4gIH1cblxuICBhd2FpdCBpbml0aWFsaXplQW5hbHl0aWNzQ29sbGVjdGlvbihjb250ZXh0LmRhdGFiYXNlTmFtZSk7XG4gIGNvbnN0IGFuYWx5dGljcyA9IGF3YWl0IGdldEl0ZW1CeTxBbmFseXRpY3NUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5BTkFMWVRJQ1MsIHthcHBJZH0pO1xuXG4gIHJldHVybiBhbmFseXRpY3MgPyB7YW5hbHl0aWNzSWQ6IGFuYWx5dGljcy5hbmFseXRpY3NJZCwgYXBwSWQ6IGFuYWx5dGljcy5hcHBJZH0gOiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFuYWx5dGljc0J5SWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGFuYWx5dGljc0lkSW5wdXQ6IHN0cmluZ1xuKTogUHJvbWlzZTxBbmFseXRpY3NUeXBlIHwgbnVsbD4gPT4ge1xuICBjb25zdCBhbmFseXRpY3NJZCA9IG5vcm1hbGl6ZVRleHQoYW5hbHl0aWNzSWRJbnB1dCwgMzYpO1xuXG4gIGlmKCFhbmFseXRpY3NJZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYXdhaXQgaW5pdGlhbGl6ZUFuYWx5dGljc0NvbGxlY3Rpb24oY29udGV4dC5kYXRhYmFzZU5hbWUpO1xuICByZXR1cm4gZ2V0SXRlbUJ5PEFuYWx5dGljc1R5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLkFOQUxZVElDUywge2FuYWx5dGljc0lkfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQW5hbHl0aWNzTW9uaXRvciA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IENyZWF0ZUFuYWx5dGljc01vbml0b3JJbnB1dFR5cGVcbik6IFByb21pc2U8QW5hbHl0aWNzVHlwZT4gPT4ge1xuICBjb25zdCBzZXNzaW9uID0gcmVxdWlyZVNlc3Npb24oY29udGV4dCk7XG4gIGNvbnN0IHthcHBJZCwgYXBwTmFtZSwgZG9tYWluLCBtb25pdG9yTmFtZX0gPSBwYXJzZU1vbml0b3JJbnB1dChpbnB1dCk7XG4gIGF3YWl0IGluaXRpYWxpemVBbmFseXRpY3NDb2xsZWN0aW9uKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCBnZXRJdGVtQnk8QW5hbHl0aWNzVHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuQU5BTFlUSUNTLCB7YXBwSWR9KTtcblxuICBpZihleGlzdGluZykge1xuICAgIGlmKGlzQWRtaW5Vc2VyKHNlc3Npb24pIHx8IChleGlzdGluZy51c2VySWRzIHx8IFtdKS5pbmNsdWRlcyhzZXNzaW9uLnVzZXJJZCkpIHtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9TRVNTSU9OKTtcbiAgfVxuXG4gIGNvbnN0IG1vbml0b3IgPSBhd2FpdCBmaW5kT3JDcmVhdGVBd3NNb25pdG9yKGNvbnRleHQsIGFwcElkLCBkb21haW4sIG1vbml0b3JOYW1lKTtcbiAgcmV0dXJuIGFkZEl0ZW08QW5hbHl0aWNzVHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuQU5BTFlUSUNTLCB7XG4gICAgX2tleTogZ2V0RG9jdW1lbnRLZXkoYXBwSWQpLFxuICAgIGFuYWx5dGljc0lkOiByYW5kb21VVUlEKCksXG4gICAgYXBwSWQsXG4gICAgYXBwTmFtZSxcbiAgICBkb21haW46IG1vbml0b3IuZG9tYWluLFxuICAgIG1vbml0b3JJZDogbW9uaXRvci5pZCxcbiAgICBtb25pdG9yTmFtZTogbW9uaXRvci5uYW1lLFxuICAgIHVzZXJJZHM6IFtzZXNzaW9uLnVzZXJJZF1cbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVnZW5lcmF0ZUFuYWx5dGljc0lkID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBhbmFseXRpY3NJZElucHV0OiBzdHJpbmdcbik6IFByb21pc2U8QW5hbHl0aWNzVHlwZT4gPT4ge1xuICBjb25zdCBzZXNzaW9uID0gcmVxdWlyZVNlc3Npb24oY29udGV4dCk7XG4gIGNvbnN0IGFuYWx5dGljc0lkID0gbm9ybWFsaXplVGV4dChhbmFseXRpY3NJZElucHV0LCAzNik7XG5cbiAgaWYoIWFuYWx5dGljc0lkKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcihFcnJvclR5cGVzLklOVkFMSURfQVJHVU1FTlRTKTtcbiAgfVxuXG4gIGF3YWl0IGluaXRpYWxpemVBbmFseXRpY3NDb2xsZWN0aW9uKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCBnZXRJdGVtQnk8QW5hbHl0aWNzVHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuQU5BTFlUSUNTLCB7YW5hbHl0aWNzSWR9KTtcbiAgY29uc3QgaGFzQWNjZXNzID0gZXhpc3RpbmcgJiYgKFxuICAgIGlzQWRtaW5Vc2VyKHNlc3Npb24pIHx8IChleGlzdGluZy51c2VySWRzIHx8IFtdKS5pbmNsdWRlcyhzZXNzaW9uLnVzZXJJZClcbiAgKTtcblxuICBpZighZXhpc3Rpbmc/Ll9rZXkgfHwgIWhhc0FjY2Vzcykge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ2ludmFsaWRfcnVtX2FwcCcpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUl0ZW08QW5hbHl0aWNzVHlwZT4oXG4gICAgY29udGV4dCxcbiAgICBDT0xMRUNUSU9OUy5BTkFMWVRJQ1MsXG4gICAgZXhpc3RpbmcuX2tleSxcbiAgICB7YW5hbHl0aWNzSWQ6IHJhbmRvbVVVSUQoKX1cbiAgKTtcbn07XG5cbnR5cGUgQXdzUnVtUmVjb3JkID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7XG4gIGV2ZW50X2RldGFpbHM/OiB1bmtub3duO1xuICBtZXRhZGF0YT86IHVua25vd247XG59O1xuXG50eXBlIE5vcm1hbGl6ZWRSdW1FdmVudCA9IEFuYWx5dGljc0V2ZW50VHlwZSAmIHtyZWFkb25seSBhcHBJZDogc3RyaW5nfTtcblxuY29uc3QgcGFyc2VKc29uUmVjb3JkID0gKHZhbHVlOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ge1xuICBpZih2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfVxuXG4gIGlmKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgIHJldHVybiBwYXJzZWQgJiYgdHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkocGFyc2VkKVxuICAgICAgPyBwYXJzZWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgIDoge307XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufTtcblxuY29uc3QgZ2V0UHJvcGVydHkgPSAoXG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGFsaWFzZXM6IHJlYWRvbmx5IHN0cmluZ1tdXG4pOiB1bmtub3duID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZEFsaWFzZXMgPSBuZXcgU2V0KGFsaWFzZXMubWFwKChhbGlhcykgPT4gYWxpYXMudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV0vZywgJycpKSk7XG4gIGNvbnN0IGVudHJpZXMgPSBbLi4uT2JqZWN0LmVudHJpZXMocHJvcGVydGllcyksIC4uLk9iamVjdC5lbnRyaWVzKG1ldGFkYXRhKV07XG4gIHJldHVybiBlbnRyaWVzLmZpbmQoKFtrZXldKSA9PiBub3JtYWxpemVkQWxpYXNlcy5oYXMoa2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTldL2csICcnKSkpPy5bMV07XG59O1xuXG5jb25zdCBub3JtYWxpemVSdW1FdmVudCA9IChyYXdFdmVudDogc3RyaW5nKTogTm9ybWFsaXplZFJ1bUV2ZW50IHwgbnVsbCA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc291cmNlID0gSlNPTi5wYXJzZShyYXdFdmVudCkgYXMgQXdzUnVtUmVjb3JkO1xuICAgIGNvbnN0IGRldGFpbHMgPSBwYXJzZUpzb25SZWNvcmQoc291cmNlLmV2ZW50X2RldGFpbHMpO1xuICAgIGNvbnN0IG1ldGFkYXRhID0gcGFyc2VKc29uUmVjb3JkKHNvdXJjZS5tZXRhZGF0YSk7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHBhcnNlSnNvblJlY29yZChkZXRhaWxzLnByb3BlcnRpZXMpO1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IE51bWJlcihzb3VyY2UuZXZlbnRfdGltZXN0YW1wIHx8IDApO1xuXG4gICAgaWYoIU51bWJlci5pc0Zpbml0ZSh0aW1lc3RhbXApIHx8IHRpbWVzdGFtcCA8PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBnZXRUZXh0ID0gKGFsaWFzZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCBmYWxsYmFjayA9ICcnKTogc3RyaW5nID0+XG4gICAgICBub3JtYWxpemVUZXh0KGdldFByb3BlcnR5KHByb3BlcnRpZXMsIG1ldGFkYXRhLCBhbGlhc2VzKSA/PyBmYWxsYmFjaywgMjU2KTtcbiAgICBjb25zdCBkdXJhdGlvblZhbHVlID0gTnVtYmVyKGdldFByb3BlcnR5KHByb3BlcnRpZXMsIG1ldGFkYXRhLCBbXG4gICAgICAnZHVyYXRpb24nLFxuICAgICAgJ2R1cmF0aW9uTXMnLFxuICAgICAgJ2xhdGVuY3knLFxuICAgICAgJ2xvYWRUaW1lJyxcbiAgICAgICdwYWdlTG9hZFRpbWUnXG4gICAgXSkgfHwgMCk7XG4gICAgY29uc3QgcGF0aCA9IG5vcm1hbGl6ZVRleHQoZGV0YWlscy5wYXRoLCAyNTYpO1xuICAgIGNvbnN0IHR5cGUgPSBub3JtYWxpemVUZXh0KHNvdXJjZS5ldmVudF90eXBlLCAyNTYpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcElkOiBub3JtYWxpemVUZXh0KGRldGFpbHMuYXBwSWQgfHwgbWV0YWRhdGEuYXBwbGljYXRpb25JZCwgTUFYX0FQUF9JRF9MRU5HVEgpLFxuICAgICAgYnJvd3Nlckxhbmd1YWdlOiBnZXRUZXh0KFsnYnJvd3Nlckxhbmd1YWdlJ10sICdVbmtub3duJyksXG4gICAgICBicm93c2VyTmFtZTogZ2V0VGV4dChbJ2Jyb3dzZXJOYW1lJ10sICdVbmtub3duJyksXG4gICAgICBicm93c2VyVmVyc2lvbjogZ2V0VGV4dChbJ2Jyb3dzZXJWZXJzaW9uJ10pLFxuICAgICAgZGV2aWNlVHlwZTogZ2V0VGV4dChbJ2RldmljZVR5cGUnXSwgJ1Vua25vd24nKSxcbiAgICAgIGR1cmF0aW9uOiBOdW1iZXIuaXNGaW5pdGUoZHVyYXRpb25WYWx1ZSkgJiYgZHVyYXRpb25WYWx1ZSA+IDAgPyBkdXJhdGlvblZhbHVlIDogMCxcbiAgICAgIGV2ZW50SWQ6IG5vcm1hbGl6ZVRleHQoc291cmNlLmV2ZW50X2lkLCAxMjgpLFxuICAgICAgaW50ZXJhY3Rpb246IGdldFRleHQoWydpbnRlcmFjdGlvbiddLCBub3JtYWxpemVUZXh0KGRldGFpbHMubmFtZSB8fCB0eXBlLCAxMjgpKSxcbiAgICAgIG5hbWU6IG5vcm1hbGl6ZVRleHQoZGV0YWlscy5uYW1lIHx8IHR5cGUsIDEyOCksXG4gICAgICBvc05hbWU6IGdldFRleHQoWydvc05hbWUnXSwgJ1Vua25vd24nKSxcbiAgICAgIG9zVmVyc2lvbjogZ2V0VGV4dChbJ29zVmVyc2lvbiddKSxcbiAgICAgIG91dGNvbWU6IGdldFRleHQoWydvdXRjb21lJ10pLFxuICAgICAgcGFnZUlkOiBnZXRUZXh0KFsncGFnZUlkJywgJ3BhZ2VJRCddLCBwYXRoIHx8ICdVbmtub3duJyksXG4gICAgICBwYXJlbnRQYWdlOiBnZXRUZXh0KFsncGFyZW50UGFnZUlkJywgJ3BhcmVudFBhZ2UnXSksXG4gICAgICBwYXRoLFxuICAgICAgc2Vzc2lvbklkOiBub3JtYWxpemVUZXh0KHNvdXJjZS5zZXNzaW9uSWQgfHwgcGFyc2VKc29uUmVjb3JkKHNvdXJjZS51c2VyX2RldGFpbHMpLnNlc3Npb25JZCwgMTI4KSxcbiAgICAgIHRpbWVzdGFtcCxcbiAgICAgIHR5cGUsXG4gICAgICB2aWV3SWQ6IGdldFRleHQoWyd2aWV3SWQnXSlcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuY29uc3QgY3JlYXRlQnJlYWtkb3duID0gKHZhbHVlczogcmVhZG9ubHkgc3RyaW5nW10sIHRvdGFsOiBudW1iZXIpID0+IHtcbiAgY29uc3QgY291bnRzID0gdmFsdWVzLnJlZHVjZTxNYXA8c3RyaW5nLCBudW1iZXI+PigocmVzdWx0LCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IGxhYmVsID0gdmFsdWUgfHwgJ1Vua25vd24nO1xuICAgIHJlc3VsdC5zZXQobGFiZWwsIChyZXN1bHQuZ2V0KGxhYmVsKSB8fCAwKSArIDEpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIG5ldyBNYXAoKSk7XG5cbiAgcmV0dXJuIEFycmF5LmZyb20oY291bnRzLCAoW2xhYmVsLCBjb3VudF0pID0+ICh7XG4gICAgY291bnQsXG4gICAgbGFiZWwsXG4gICAgcGVyY2VudGFnZTogdG90YWwgPiAwID8gTWF0aC5yb3VuZCgoY291bnQgLyB0b3RhbCkgKiAxMDAwKSAvIDEwIDogMFxuICB9KSkuc29ydCgobGVmdCwgcmlnaHQpID0+IHJpZ2h0LmNvdW50IC0gbGVmdC5jb3VudCB8fCBsZWZ0LmxhYmVsLmxvY2FsZUNvbXBhcmUocmlnaHQubGFiZWwpKTtcbn07XG5cbmNvbnN0IHBlcmNlbnRpbGUgPSAodmFsdWVzOiByZWFkb25seSBudW1iZXJbXSwgcGVyY2VudGlsZVZhbHVlOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICBpZih2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBjb25zdCBzb3J0ZWQgPSB2YWx1ZXMudG9Tb3J0ZWQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0IC0gcmlnaHQpO1xuICBjb25zdCBpbmRleCA9IE1hdGgubWF4KDAsIE1hdGguY2VpbChwZXJjZW50aWxlVmFsdWUgKiBzb3J0ZWQubGVuZ3RoKSAtIDEpO1xuICByZXR1cm4gc29ydGVkW2luZGV4XTtcbn07XG5cbmNvbnN0IGNyZWF0ZVZpZXdQZXJmb3JtYW5jZSA9IChldmVudHM6IHJlYWRvbmx5IE5vcm1hbGl6ZWRSdW1FdmVudFtdKSA9PiB7XG4gIGNvbnN0IHZpZXdzID0gZXZlbnRzLnJlZHVjZTxNYXA8c3RyaW5nLCBOb3JtYWxpemVkUnVtRXZlbnRbXT4+KChyZXN1bHQsIGV2ZW50KSA9PiB7XG4gICAgaWYoXG4gICAgICAoZXZlbnQudHlwZSAhPT0gJ3ZpZXdfcGVyZm9ybWFuY2UnICYmIGV2ZW50Lm5hbWUgIT09ICd2aWV3X3BlcmZvcm1hbmNlJylcbiAgICAgIHx8ICFldmVudC52aWV3SWRcbiAgICAgIHx8IGV2ZW50Lm91dGNvbWUgPT09ICdjYW5jZWxsZWQnXG4gICAgKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IHNhbXBsZXMgPSByZXN1bHQuZ2V0KGV2ZW50LnZpZXdJZCkgfHwgW107XG4gICAgc2FtcGxlcy5wdXNoKGV2ZW50KTtcbiAgICByZXN1bHQuc2V0KGV2ZW50LnZpZXdJZCwgc2FtcGxlcyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwgbmV3IE1hcCgpKTtcblxuICByZXR1cm4gQXJyYXkuZnJvbSh2aWV3cywgKFt2aWV3SWQsIHNhbXBsZXNdKSA9PiB7XG4gICAgY29uc3QgZHVyYXRpb25zID0gc2FtcGxlcy5tYXAoKGV2ZW50KSA9PiBldmVudC5kdXJhdGlvbik7XG4gICAgY29uc3QgcGVyY2VudGFnZSA9IChvdXRjb21lOiBzdHJpbmcpOiBudW1iZXIgPT4gTWF0aC5yb3VuZChcbiAgICAgIChzYW1wbGVzLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50Lm91dGNvbWUgPT09IG91dGNvbWUpLmxlbmd0aCAvIHNhbXBsZXMubGVuZ3RoKSAqIDEwMDBcbiAgICApIC8gMTA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZmFpbHVyZVJhdGU6IHBlcmNlbnRhZ2UoJ2ZhaWx1cmUnKSxcbiAgICAgIHA1MDogcGVyY2VudGlsZShkdXJhdGlvbnMsIDAuNSksXG4gICAgICBwNzU6IHBlcmNlbnRpbGUoZHVyYXRpb25zLCAwLjc1KSxcbiAgICAgIHA5NTogcGVyY2VudGlsZShkdXJhdGlvbnMsIDAuOTUpLFxuICAgICAgc2FtcGxlQ291bnQ6IHNhbXBsZXMubGVuZ3RoLFxuICAgICAgdGltZW91dFJhdGU6IHBlcmNlbnRhZ2UoJ3RpbWVvdXQnKSxcbiAgICAgIHZpZXdJZFxuICAgIH07XG4gIH0pLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiByaWdodC5zYW1wbGVDb3VudCAtIGxlZnQuc2FtcGxlQ291bnQgfHwgbGVmdC52aWV3SWQubG9jYWxlQ29tcGFyZShyaWdodC52aWV3SWQpKTtcbn07XG5cbmNvbnN0IGdldEF1dGhvcml6ZWRBbmFseXRpY3MgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGFuYWx5dGljc0lkOiBzdHJpbmdcbik6IFByb21pc2U8QW5hbHl0aWNzVHlwZT4gPT4ge1xuICBjb25zdCBzZXNzaW9uID0gcmVxdWlyZVNlc3Npb24oY29udGV4dCk7XG4gIGNvbnN0IGFuYWx5dGljcyA9IGF3YWl0IGdldEFuYWx5dGljc0J5SWQoY29udGV4dCwgYW5hbHl0aWNzSWQpO1xuICBjb25zdCBoYXNBY2Nlc3MgPSBhbmFseXRpY3MgJiYgKFxuICAgIGlzQWRtaW5Vc2VyKHNlc3Npb24pIHx8IChhbmFseXRpY3MudXNlcklkcyB8fCBbXSkuaW5jbHVkZXMoc2Vzc2lvbi51c2VySWQpXG4gICk7XG5cbiAgaWYoIWFuYWx5dGljcyB8fCAhaGFzQWNjZXNzKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcihFcnJvclR5cGVzLklOVkFMSURfU0VTU0lPTik7XG4gIH1cblxuICByZXR1cm4gYW5hbHl0aWNzO1xufTtcblxuY29uc3QgZ2V0QW5hbHl0aWNzQXBwTmFtZSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBhbmFseXRpY3M6IEFuYWx5dGljc1R5cGUpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBpZihhbmFseXRpY3MuYXBwTmFtZSkge1xuICAgIHJldHVybiBhbmFseXRpY3MuYXBwTmFtZTtcbiAgfVxuXG4gIGNvbnN0IGFwcCA9IGF3YWl0IGdldEl0ZW1CeTxBcHBUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5BUFBTLCB7XG4gICAgY29uZGl0aW9uczogW1xuICAgICAge2ZpZWxkOiAnYXBwSWQnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGFuYWx5dGljcy5hcHBJZH0sXG4gICAgICB7ZmllbGQ6ICdfa2V5Jywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBhbmFseXRpY3MuYXBwSWR9XG4gICAgXSxcbiAgICBsb2dpYzogJ09SJ1xuICB9KTtcblxuICByZXR1cm4gbm9ybWFsaXplVGV4dChhcHA/LmRpc3BsYXlOYW1lIHx8IGFwcD8ubmFtZSB8fCBhbmFseXRpY3MubW9uaXRvck5hbWUgfHwgYW5hbHl0aWNzLmFwcElkLCBNQVhfTU9OSVRPUl9OQU1FX0xFTkdUSCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXZhaWxhYmxlQW5hbHl0aWNzID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPEFuYWx5dGljc1R5cGVbXT4gPT4ge1xuICBjb25zdCBzZXNzaW9uID0gcmVxdWlyZVNlc3Npb24oY29udGV4dCk7XG4gIGF3YWl0IGluaXRpYWxpemVBbmFseXRpY3NDb2xsZWN0aW9uKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgY29uc3QgYW5hbHl0aWNzID0gYXdhaXQgZ2V0TGlzdEJ5PEFuYWx5dGljc1R5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLkFOQUxZVElDUywge30sIHtcbiAgICBzb3J0OiBbe2RpcmVjdGlvbjogJ0FTQycsIGZpZWxkOiAnYXBwTmFtZSd9XVxuICB9KTtcblxuICBjb25zdCBhdmFpbGFibGUgPSBhbmFseXRpY3MuZmlsdGVyKChpdGVtKSA9PlxuICAgIGlzQWRtaW5Vc2VyKHNlc3Npb24pIHx8IChpdGVtLnVzZXJJZHMgfHwgW10pLmluY2x1ZGVzKHNlc3Npb24udXNlcklkKSk7XG5cbiAgY29uc3QgZW5yaWNoZWQgPSBhd2FpdCBQcm9taXNlLmFsbChhdmFpbGFibGUubWFwKGFzeW5jIChpdGVtKSA9PiAoe1xuICAgIC4uLml0ZW0sXG4gICAgYXBwTmFtZTogYXdhaXQgZ2V0QW5hbHl0aWNzQXBwTmFtZShjb250ZXh0LCBpdGVtKSxcbiAgICB1c2VySWRzOiBpdGVtLnVzZXJJZHMgfHwgW11cbiAgfSkpKTtcblxuICByZXR1cm4gZW5yaWNoZWQuc29ydCgobGVmdCwgcmlnaHQpID0+XG4gICAgKGxlZnQuYXBwTmFtZSB8fCAnJykubG9jYWxlQ29tcGFyZShyaWdodC5hcHBOYW1lIHx8ICcnKSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0QW5hbHl0aWNzQWNjZXNzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBhbmFseXRpY3NJZElucHV0OiBzdHJpbmcsXG4gIHVzZXJJZHNJbnB1dDogcmVhZG9ubHkgc3RyaW5nW11cbik6IFByb21pc2U8QW5hbHl0aWNzVHlwZT4gPT4ge1xuICByZXF1aXJlQWRtaW4oY29udGV4dCk7XG4gIGNvbnN0IGFuYWx5dGljc0lkID0gbm9ybWFsaXplVGV4dChhbmFseXRpY3NJZElucHV0LCAzNik7XG4gIGNvbnN0IGFuYWx5dGljcyA9IGF3YWl0IGdldEFuYWx5dGljc0J5SWQoY29udGV4dCwgYW5hbHl0aWNzSWQpO1xuXG4gIGlmKCFhbmFseXRpY3M/Ll9rZXkpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdpbnZhbGlkX3J1bV9hcHAnKTtcbiAgfVxuXG4gIGNvbnN0IHVzZXJJZHMgPSBBcnJheS5mcm9tKG5ldyBTZXQoKHVzZXJJZHNJbnB1dCB8fCBbXSlcbiAgICAubWFwKCh1c2VySWQpID0+IG5vcm1hbGl6ZVRleHQodXNlcklkLCAxMjgpKVxuICAgIC5maWx0ZXIoQm9vbGVhbikpKVxuICAgIC5zbGljZSgwLCAxMDApO1xuXG4gIHJldHVybiB1cGRhdGVJdGVtPEFuYWx5dGljc1R5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLkFOQUxZVElDUywgYW5hbHl0aWNzLl9rZXksIHt1c2VySWRzfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QW5hbHl0aWNzRGFzaGJvYXJkID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBhbmFseXRpY3NJZElucHV0OiBzdHJpbmcsXG4gIHJhbmdlRGF5c0lucHV0OiBudW1iZXJcbik6IFByb21pc2U8QW5hbHl0aWNzRGFzaGJvYXJkVHlwZT4gPT4ge1xuICBjb25zdCBhbmFseXRpY3NJZCA9IG5vcm1hbGl6ZVRleHQoYW5hbHl0aWNzSWRJbnB1dCwgMzYpO1xuICBjb25zdCByYW5nZURheXMgPSBNYXRoLmZsb29yKE51bWJlcihyYW5nZURheXNJbnB1dCkpO1xuXG4gIGlmKCFhbmFseXRpY3NJZCB8fCAhVkFMSURfUkFOR0VfREFZUy5oYXMocmFuZ2VEYXlzKSkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FSR1VNRU5UUyk7XG4gIH1cblxuICBjb25zdCBhbmFseXRpY3MgPSBhd2FpdCBnZXRBdXRob3JpemVkQW5hbHl0aWNzKGNvbnRleHQsIGFuYWx5dGljc0lkKTtcbiAgY29uc3QgZW5kVGltZSA9IERhdGUubm93KCk7XG4gIGNvbnN0IHN0YXJ0VGltZSA9IGVuZFRpbWUgLSByYW5nZURheXMgKiAyNCAqIDYwICogNjAgKiAxMDAwICsgKHJhbmdlRGF5cyA9PT0gMzAgPyA2MF8wMDAgOiAwKTtcbiAgY29uc3QgY2xpZW50ID0gZ2V0UnVtQ2xpZW50KGNvbnRleHQpO1xuICBjb25zdCByYXdFdmVudHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBuZXh0VG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IHBhZ2UgPSAwO1xuXG4gIGRvIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBHZXRBcHBNb25pdG9yRGF0YUNvbW1hbmQoe1xuICAgICAgTWF4UmVzdWx0czogTUFYX1JVTV9SRVNVTFRTLFxuICAgICAgTmFtZTogYW5hbHl0aWNzLm1vbml0b3JOYW1lLFxuICAgICAgLi4uKG5leHRUb2tlbiA/IHtOZXh0VG9rZW46IG5leHRUb2tlbn0gOiB7fSksXG4gICAgICBUaW1lUmFuZ2U6IHtBZnRlcjogc3RhcnRUaW1lLCBCZWZvcmU6IGVuZFRpbWV9XG4gICAgfSkpO1xuICAgIHJhd0V2ZW50cy5wdXNoKC4uLihyZXNwb25zZS5FdmVudHMgfHwgW10pKTtcbiAgICBuZXh0VG9rZW4gPSByZXNwb25zZS5OZXh0VG9rZW47XG4gICAgcGFnZSArPSAxO1xuICB9IHdoaWxlKG5leHRUb2tlbiAmJiBwYWdlIDwgTUFYX1JVTV9QQUdFUyk7XG5cbiAgY29uc3QgZXZlbnRzID0gcmF3RXZlbnRzXG4gICAgLm1hcChub3JtYWxpemVSdW1FdmVudClcbiAgICAuZmlsdGVyKChldmVudCk6IGV2ZW50IGlzIE5vcm1hbGl6ZWRSdW1FdmVudCA9PiBCb29sZWFuKGV2ZW50ICYmIGV2ZW50LmFwcElkID09PSBhbmFseXRpY3MuYXBwSWQpKVxuICAgIC5zb3J0KChsZWZ0LCByaWdodCkgPT4gcmlnaHQudGltZXN0YW1wIC0gbGVmdC50aW1lc3RhbXApO1xuICBjb25zdCBzZXNzaW9ucyA9IG5ldyBTZXQoZXZlbnRzLm1hcCgoZXZlbnQpID0+IGV2ZW50LnNlc3Npb25JZCkuZmlsdGVyKEJvb2xlYW4pKTtcbiAgY29uc3QgaW50ZXJhY3Rpb25FdmVudHMgPSBldmVudHMuZmlsdGVyKChldmVudCkgPT4gKFxuICAgIGV2ZW50LnR5cGUgIT09ICdwYWdlX3ZpZXcnICYmIGV2ZW50LnR5cGUgIT09ICd2aWV3X3BlcmZvcm1hbmNlJ1xuICApKTtcbiAgY29uc3QgZXJyb3JFdmVudHMgPSBldmVudHMuZmlsdGVyKChldmVudCkgPT4gL2Vycm9yfGV4Y2VwdGlvbnxmYWlsdXJlL2kudGVzdChgJHtldmVudC50eXBlfSAke2V2ZW50Lm5hbWV9YCkpO1xuICBjb25zdCBkdXJhdGlvbnMgPSBldmVudHMubWFwKChldmVudCkgPT4gZXZlbnQuZHVyYXRpb24pLmZpbHRlcigoZHVyYXRpb24pID0+IGR1cmF0aW9uID4gMCk7XG4gIGNvbnN0IGJ1Y2tldFNpemUgPSByYW5nZURheXMgPT09IDEgPyA2MCAqIDYwICogMTAwMCA6IDI0ICogNjAgKiA2MCAqIDEwMDA7XG4gIGNvbnN0IGJ1Y2tldHMgPSBuZXcgTWFwPG51bWJlciwge2Vycm9yczogbnVtYmVyOyBldmVudHM6IG51bWJlcjsgaW50ZXJhY3Rpb25zOiBudW1iZXI7IHNlc3Npb25zOiBTZXQ8c3RyaW5nPn0+KCk7XG5cbiAgZm9yKGxldCB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKHN0YXJ0VGltZSAvIGJ1Y2tldFNpemUpICogYnVja2V0U2l6ZTsgdGltZXN0YW1wIDw9IGVuZFRpbWU7IHRpbWVzdGFtcCArPSBidWNrZXRTaXplKSB7XG4gICAgYnVja2V0cy5zZXQodGltZXN0YW1wLCB7ZXJyb3JzOiAwLCBldmVudHM6IDAsIGludGVyYWN0aW9uczogMCwgc2Vzc2lvbnM6IG5ldyBTZXQoKX0pO1xuICB9XG5cbiAgZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgYnVja2V0ID0gYnVja2V0cy5nZXQoTWF0aC5mbG9vcihldmVudC50aW1lc3RhbXAgLyBidWNrZXRTaXplKSAqIGJ1Y2tldFNpemUpO1xuICAgIGlmKCFidWNrZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYnVja2V0LmV2ZW50cyArPSAxO1xuICAgIGJ1Y2tldC5pbnRlcmFjdGlvbnMgKz0gZXZlbnQudHlwZSA9PT0gJ3BhZ2VfdmlldycgfHwgZXZlbnQudHlwZSA9PT0gJ3ZpZXdfcGVyZm9ybWFuY2UnID8gMCA6IDE7XG4gICAgYnVja2V0LmVycm9ycyArPSAvZXJyb3J8ZXhjZXB0aW9ufGZhaWx1cmUvaS50ZXN0KGAke2V2ZW50LnR5cGV9ICR7ZXZlbnQubmFtZX1gKSA/IDEgOiAwO1xuICAgIGlmKGV2ZW50LnNlc3Npb25JZCkge1xuICAgICAgYnVja2V0LnNlc3Npb25zLmFkZChldmVudC5zZXNzaW9uSWQpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhbmFseXRpY3NJZDogYW5hbHl0aWNzLmFuYWx5dGljc0lkLFxuICAgIGFwcElkOiBhbmFseXRpY3MuYXBwSWQsXG4gICAgYXBwTmFtZTogYXdhaXQgZ2V0QW5hbHl0aWNzQXBwTmFtZShjb250ZXh0LCBhbmFseXRpY3MpLFxuICAgIGF2ZXJhZ2VEdXJhdGlvbjogZHVyYXRpb25zLmxlbmd0aFxuICAgICAgPyBNYXRoLnJvdW5kKGR1cmF0aW9ucy5yZWR1Y2UoKHRvdGFsLCBkdXJhdGlvbikgPT4gdG90YWwgKyBkdXJhdGlvbiwgMCkgLyBkdXJhdGlvbnMubGVuZ3RoKVxuICAgICAgOiAwLFxuICAgIGJyb3dzZXJzOiBjcmVhdGVCcmVha2Rvd24oZXZlbnRzLm1hcCgoZXZlbnQpID0+IFtldmVudC5icm93c2VyTmFtZSwgZXZlbnQuYnJvd3NlclZlcnNpb25dLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJykpLCBldmVudHMubGVuZ3RoKSxcbiAgICBkZXZpY2VzOiBjcmVhdGVCcmVha2Rvd24oZXZlbnRzLm1hcCgoZXZlbnQpID0+IGV2ZW50LmRldmljZVR5cGUpLCBldmVudHMubGVuZ3RoKSxcbiAgICBlbmRUaW1lLFxuICAgIGVycm9yQ291bnQ6IGVycm9yRXZlbnRzLmxlbmd0aCxcbiAgICBldmVudENvdW50OiBldmVudHMubGVuZ3RoLFxuICAgIGdlbmVyYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgIGludGVyYWN0aW9uczogY3JlYXRlQnJlYWtkb3duKGludGVyYWN0aW9uRXZlbnRzLm1hcCgoZXZlbnQpID0+IGV2ZW50LmludGVyYWN0aW9uIHx8IGV2ZW50Lm5hbWUpLCBpbnRlcmFjdGlvbkV2ZW50cy5sZW5ndGgpLFxuICAgIGxhbmd1YWdlczogY3JlYXRlQnJlYWtkb3duKGV2ZW50cy5tYXAoKGV2ZW50KSA9PiBldmVudC5icm93c2VyTGFuZ3VhZ2UpLCBldmVudHMubGVuZ3RoKSxcbiAgICBtb25pdG9ySWQ6IGFuYWx5dGljcy5tb25pdG9ySWQsXG4gICAgbW9uaXRvck5hbWU6IGFuYWx5dGljcy5tb25pdG9yTmFtZSxcbiAgICBvcGVyYXRpbmdTeXN0ZW1zOiBjcmVhdGVCcmVha2Rvd24oZXZlbnRzLm1hcCgoZXZlbnQpID0+IFtldmVudC5vc05hbWUsIGV2ZW50Lm9zVmVyc2lvbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKSksIGV2ZW50cy5sZW5ndGgpLFxuICAgIHBhZ2VzOiBjcmVhdGVCcmVha2Rvd24oZXZlbnRzLm1hcCgoZXZlbnQpID0+IGV2ZW50LnBhZ2VJZCB8fCBldmVudC5wYXRoKSwgZXZlbnRzLmxlbmd0aCksXG4gICAgcGFnZVZpZXdDb3VudDogZXZlbnRzLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LnR5cGUgPT09ICdwYWdlX3ZpZXcnKS5sZW5ndGgsXG4gICAgcGFydGlhbDogQm9vbGVhbihuZXh0VG9rZW4pLFxuICAgIHBlcmZvcm1hbmNlU2FtcGxlczogZHVyYXRpb25zLmxlbmd0aCxcbiAgICByZWNlbnRFdmVudHM6IGV2ZW50cy5zbGljZSgwLCAxMDApLm1hcCgoe2FwcElkOiBfYXBwSWQsIC4uLmV2ZW50fSkgPT4gZXZlbnQpLFxuICAgIHNlc3Npb25Db3VudDogc2Vzc2lvbnMuc2l6ZSxcbiAgICBzdGFydFRpbWUsXG4gICAgdGltZWxpbmU6IEFycmF5LmZyb20oYnVja2V0cywgKFt0aW1lc3RhbXAsIGJ1Y2tldF0pID0+ICh7XG4gICAgICBlcnJvcnM6IGJ1Y2tldC5lcnJvcnMsXG4gICAgICBldmVudHM6IGJ1Y2tldC5ldmVudHMsXG4gICAgICBpbnRlcmFjdGlvbnM6IGJ1Y2tldC5pbnRlcmFjdGlvbnMsXG4gICAgICBzZXNzaW9uczogYnVja2V0LnNlc3Npb25zLnNpemUsXG4gICAgICB0aW1lc3RhbXBcbiAgICB9KSksXG4gICAgdmlld1BlcmZvcm1hbmNlOiBjcmVhdGVWaWV3UGVyZm9ybWFuY2UoZXZlbnRzKVxuICB9O1xufTtcbiJdLCJuYW1lcyI6WyJDcmVhdGVBcHBNb25pdG9yQ29tbWFuZCIsIkdldEFwcE1vbml0b3JDb21tYW5kIiwiR2V0QXBwTW9uaXRvckRhdGFDb21tYW5kIiwiUlVNQ2xpZW50IiwiY3JlYXRlSGFzaCIsInJhbmRvbVVVSUQiLCJDb25maWciLCJDT0xMRUNUSU9OUyIsIkVycm9yVHlwZXMiLCJVc2VyRXJyb3IiLCJ1c2VEYiIsImlzQWRtaW5Vc2VyIiwiYWRkSXRlbSIsImdldEl0ZW1CeSIsImdldExpc3RCeSIsInVwZGF0ZUl0ZW0iLCJNQVhfQVBQX0lEX0xFTkdUSCIsIk1BWF9ET01BSU5fTEVOR1RIIiwiTUFYX01PTklUT1JfTkFNRV9MRU5HVEgiLCJNQVhfUlVNX1BBR0VTIiwiTUFYX1JVTV9SRVNVTFRTIiwiVkFMSURfUkFOR0VfREFZUyIsIlNldCIsImNvbGxlY3Rpb25Jbml0aWFsaXphdGlvbiIsIk1hcCIsIm5vcm1hbGl6ZVRleHQiLCJ2YWx1ZSIsIm1heExlbmd0aCIsIlN0cmluZyIsInRyaW0iLCJzbGljZSIsIm5vcm1hbGl6ZURvbWFpbiIsInJlcGxhY2UiLCJzcGxpdCIsInRvTG93ZXJDYXNlIiwibm9ybWFsaXplTW9uaXRvck5hbWUiLCJhcHBJZCIsImdldERvY3VtZW50S2V5IiwidXBkYXRlIiwiZGlnZXN0IiwicmVxdWlyZUFkbWluIiwiY29udGV4dCIsInNlc3Npb24iLCJJTlZBTElEX1NFU1NJT04iLCJyZXF1aXJlU2Vzc2lvbiIsInVzZXJJZCIsImluaXRpYWxpemVBbmFseXRpY3NDb2xsZWN0aW9uIiwiZGF0YWJhc2VOYW1lIiwiY2FjaGVLZXkiLCJleGlzdGluZ0luaXRpYWxpemF0aW9uIiwiZ2V0IiwiaW5pdGlhbGl6YXRpb24iLCJkYXRhYmFzZSIsImNvbGxlY3Rpb24iLCJBTkFMWVRJQ1MiLCJleGlzdHMiLCJjcmVhdGVDb2xsZWN0aW9uIiwiZXJyb3IiLCJlbnN1cmVJbmRleCIsImZpZWxkcyIsInR5cGUiLCJ1bmlxdWUiLCJzZXQiLCJkZWxldGUiLCJnZXRSdW1DbGllbnQiLCJhd3NDb25maWciLCJjb25maWciLCJhd3MiLCJhY2Nlc3NLZXlJZCIsInNlY3JldEFjY2Vzc0tleSIsInNlc3Npb25Ub2tlbiIsImNyZWRlbnRpYWxzIiwidXNlc1J1bnRpbWVDcmVkZW50aWFscyIsIkJvb2xlYW4iLCJwcm9jZXNzIiwiZW52IiwiQVdTX1NFU1NJT05fVE9LRU4iLCJBV1NfQUNDRVNTX0tFWV9JRCIsIkFXU19TRUNSRVRfQUNDRVNTX0tFWSIsInVuZGVmaW5lZCIsInJlZ2lvbiIsImZpbmRBd3NNb25pdG9yIiwiY2xpZW50IiwibW9uaXRvck5hbWUiLCJyZXNwb25zZSIsInNlbmQiLCJOYW1lIiwibW9uaXRvcklkIiwiQXBwTW9uaXRvciIsIklkIiwiZG9tYWluIiwiRG9tYWluIiwiaWQiLCJuYW1lIiwiZmluZE9yQ3JlYXRlQXdzTW9uaXRvciIsImV4aXN0aW5nTW9uaXRvciIsIkN1c3RvbUV2ZW50cyIsIlN0YXR1cyIsIkN3TG9nRW5hYmxlZCIsIlBsYXRmb3JtIiwiVGFncyIsIm1hbmFnZWRCeSIsInBhcnNlTW9uaXRvcklucHV0IiwiaW5wdXQiLCJhcHBOYW1lIiwiSU5WQUxJRF9BUkdVTUVOVFMiLCJnZXRBbmFseXRpY3NCeUFwcElkIiwiYXBwSWRJbnB1dCIsImdldEFuYWx5dGljc0NvbmZpZ3VyYXRpb24iLCJhbmFseXRpY3MiLCJhbmFseXRpY3NJZCIsImdldEFuYWx5dGljc0J5SWQiLCJhbmFseXRpY3NJZElucHV0IiwiY3JlYXRlQW5hbHl0aWNzTW9uaXRvciIsImV4aXN0aW5nIiwidXNlcklkcyIsImluY2x1ZGVzIiwibW9uaXRvciIsIl9rZXkiLCJyZWdlbmVyYXRlQW5hbHl0aWNzSWQiLCJoYXNBY2Nlc3MiLCJwYXJzZUpzb25SZWNvcmQiLCJBcnJheSIsImlzQXJyYXkiLCJwYXJzZWQiLCJKU09OIiwicGFyc2UiLCJnZXRQcm9wZXJ0eSIsInByb3BlcnRpZXMiLCJtZXRhZGF0YSIsImFsaWFzZXMiLCJub3JtYWxpemVkQWxpYXNlcyIsIm1hcCIsImFsaWFzIiwiZW50cmllcyIsIk9iamVjdCIsImZpbmQiLCJrZXkiLCJoYXMiLCJub3JtYWxpemVSdW1FdmVudCIsInJhd0V2ZW50Iiwic291cmNlIiwiZGV0YWlscyIsImV2ZW50X2RldGFpbHMiLCJ0aW1lc3RhbXAiLCJOdW1iZXIiLCJldmVudF90aW1lc3RhbXAiLCJpc0Zpbml0ZSIsImdldFRleHQiLCJmYWxsYmFjayIsImR1cmF0aW9uVmFsdWUiLCJwYXRoIiwiZXZlbnRfdHlwZSIsImFwcGxpY2F0aW9uSWQiLCJicm93c2VyTGFuZ3VhZ2UiLCJicm93c2VyTmFtZSIsImJyb3dzZXJWZXJzaW9uIiwiZGV2aWNlVHlwZSIsImR1cmF0aW9uIiwiZXZlbnRJZCIsImV2ZW50X2lkIiwiaW50ZXJhY3Rpb24iLCJvc05hbWUiLCJvc1ZlcnNpb24iLCJvdXRjb21lIiwicGFnZUlkIiwicGFyZW50UGFnZSIsInNlc3Npb25JZCIsInVzZXJfZGV0YWlscyIsInZpZXdJZCIsImNyZWF0ZUJyZWFrZG93biIsInZhbHVlcyIsInRvdGFsIiwiY291bnRzIiwicmVkdWNlIiwicmVzdWx0IiwibGFiZWwiLCJmcm9tIiwiY291bnQiLCJwZXJjZW50YWdlIiwiTWF0aCIsInJvdW5kIiwic29ydCIsImxlZnQiLCJyaWdodCIsImxvY2FsZUNvbXBhcmUiLCJwZXJjZW50aWxlIiwicGVyY2VudGlsZVZhbHVlIiwibGVuZ3RoIiwic29ydGVkIiwidG9Tb3J0ZWQiLCJpbmRleCIsIm1heCIsImNlaWwiLCJjcmVhdGVWaWV3UGVyZm9ybWFuY2UiLCJldmVudHMiLCJ2aWV3cyIsImV2ZW50Iiwic2FtcGxlcyIsInB1c2giLCJkdXJhdGlvbnMiLCJmaWx0ZXIiLCJmYWlsdXJlUmF0ZSIsInA1MCIsInA3NSIsInA5NSIsInNhbXBsZUNvdW50IiwidGltZW91dFJhdGUiLCJnZXRBdXRob3JpemVkQW5hbHl0aWNzIiwiZ2V0QW5hbHl0aWNzQXBwTmFtZSIsImFwcCIsIkFQUFMiLCJjb25kaXRpb25zIiwiZmllbGQiLCJvcGVyYXRvciIsImxvZ2ljIiwiZGlzcGxheU5hbWUiLCJnZXRBdmFpbGFibGVBbmFseXRpY3MiLCJkaXJlY3Rpb24iLCJhdmFpbGFibGUiLCJpdGVtIiwiZW5yaWNoZWQiLCJQcm9taXNlIiwiYWxsIiwic2V0QW5hbHl0aWNzQWNjZXNzIiwidXNlcklkc0lucHV0IiwiZ2V0QW5hbHl0aWNzRGFzaGJvYXJkIiwicmFuZ2VEYXlzSW5wdXQiLCJyYW5nZURheXMiLCJmbG9vciIsImVuZFRpbWUiLCJEYXRlIiwibm93Iiwic3RhcnRUaW1lIiwicmF3RXZlbnRzIiwibmV4dFRva2VuIiwicGFnZSIsIk1heFJlc3VsdHMiLCJOZXh0VG9rZW4iLCJUaW1lUmFuZ2UiLCJBZnRlciIsIkJlZm9yZSIsIkV2ZW50cyIsInNlc3Npb25zIiwiaW50ZXJhY3Rpb25FdmVudHMiLCJlcnJvckV2ZW50cyIsInRlc3QiLCJidWNrZXRTaXplIiwiYnVja2V0cyIsImVycm9ycyIsImludGVyYWN0aW9ucyIsImZvckVhY2giLCJidWNrZXQiLCJhZGQiLCJhdmVyYWdlRHVyYXRpb24iLCJicm93c2VycyIsImpvaW4iLCJkZXZpY2VzIiwiZXJyb3JDb3VudCIsImV2ZW50Q291bnQiLCJnZW5lcmF0ZWRBdCIsImxhbmd1YWdlcyIsIm9wZXJhdGluZ1N5c3RlbXMiLCJwYWdlcyIsInBhZ2VWaWV3Q291bnQiLCJwYXJ0aWFsIiwicGVyZm9ybWFuY2VTYW1wbGVzIiwicmVjZW50RXZlbnRzIiwiX2FwcElkIiwic2Vzc2lvbkNvdW50Iiwic2l6ZSIsInRpbWVsaW5lIiwidmlld1BlcmZvcm1hbmNl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
539
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9hbmFseXRpY3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjYtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7XG4gIENyZWF0ZUFwcE1vbml0b3JDb21tYW5kLFxuICBHZXRBcHBNb25pdG9yQ29tbWFuZCxcbiAgR2V0QXBwTW9uaXRvckRhdGFDb21tYW5kLFxuICBSVU1DbGllbnRcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXJ1bSc7XG5pbXBvcnQge2NyZWF0ZUhhc2gsIHJhbmRvbVVVSUR9IGZyb20gJ2NyeXB0byc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtDT0xMRUNUSU9OU30gZnJvbSAnLi4vY29uc3RhbnRzL2NvbGxlY3Rpb25zLmpzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtVc2VyRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7dXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHtpc0FkbWluVXNlcn0gZnJvbSAnLi4vdXRpbHMvc2Vzc2lvblV0aWxzLmpzJztcbmltcG9ydCB7YWRkSXRlbSwgZ2V0SXRlbUJ5LCBnZXRMaXN0QnksIHVwZGF0ZUl0ZW19IGZyb20gJy4vY3J1ZC5qcyc7XG5cbmltcG9ydCB0eXBlIHtBd3NDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBwVHlwZX0gZnJvbSAnLi4vdHlwZXMvYXBwcy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEFuYWx5dGljc0NvbmZpZ3VyYXRpb25UeXBlLFxuICBBbmFseXRpY3NEYXNoYm9hcmRUeXBlLFxuICBBbmFseXRpY3NFdmVudFR5cGUsXG4gIEFuYWx5dGljc1R5cGUsXG4gIENyZWF0ZUFuYWx5dGljc01vbml0b3JJbnB1dFR5cGVcbn0gZnJvbSAnLi4vdHlwZXMvYW5hbHl0aWNzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtTZXNzaW9ufSBmcm9tICcuLi91dGlscy9zZXNzaW9uVXRpbHMuanMnO1xuXG5jb25zdCBNQVhfQVBQX0lEX0xFTkdUSCA9IDEyODtcbmNvbnN0IE1BWF9ET01BSU5fTEVOR1RIID0gMjUzO1xuY29uc3QgTUFYX01PTklUT1JfTkFNRV9MRU5HVEggPSAyNTU7XG5jb25zdCBNQVhfUlVNX1BBR0VTID0gMTA7XG5jb25zdCBNQVhfUlVNX1JFU1VMVFMgPSAxMDA7XG5jb25zdCBWQUxJRF9SQU5HRV9EQVlTID0gbmV3IFNldChbMSwgNywgMzBdKTtcbmNvbnN0IGNvbGxlY3Rpb25Jbml0aWFsaXphdGlvbiA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+PigpO1xuXG5jb25zdCBub3JtYWxpemVUZXh0ID0gKHZhbHVlOiB1bmtub3duLCBtYXhMZW5ndGg6IG51bWJlcik6IHN0cmluZyA9PlxuICBTdHJpbmcodmFsdWUgfHwgJycpLnRyaW0oKS5zbGljZSgwLCBtYXhMZW5ndGgpO1xuXG5jb25zdCBub3JtYWxpemVEb21haW4gPSAodmFsdWU6IHVua25vd24pOiBzdHJpbmcgPT4gbm9ybWFsaXplVGV4dCh2YWx1ZSwgTUFYX0RPTUFJTl9MRU5HVEgpXG4gIC5yZXBsYWNlKC9eaHR0cHM/OlxcL1xcLy9pLCAnJylcbiAgLnNwbGl0KCcvJylbMF1cbiAgLnNwbGl0KCc6JylbMF1cbiAgLnRvTG93ZXJDYXNlKCk7XG5cbmNvbnN0IG5vcm1hbGl6ZU1vbml0b3JOYW1lID0gKHZhbHVlOiB1bmtub3duLCBhcHBJZDogc3RyaW5nKTogc3RyaW5nID0+XG4gIG5vcm1hbGl6ZVRleHQodmFsdWUgfHwgYXBwSWQsIE1BWF9NT05JVE9SX05BTUVfTEVOR1RIKS5yZXBsYWNlKC9bXmEtekEtWjAtOS1fXS9nLCAnLScpO1xuXG5jb25zdCBnZXREb2N1bWVudEtleSA9IChhcHBJZDogc3RyaW5nKTogc3RyaW5nID0+XG4gIGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShhcHBJZCkuZGlnZXN0KCdoZXgnKTtcblxuY29uc3QgcmVxdWlyZUFkbWluID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiB2b2lkID0+IHtcbiAgaWYoIWlzQWRtaW5Vc2VyKGNvbnRleHQuc2Vzc2lvbiBhcyBTZXNzaW9uKSkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX1NFU1NJT04pO1xuICB9XG59O1xuXG5jb25zdCByZXF1aXJlU2Vzc2lvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogU2Vzc2lvbiA9PiB7XG4gIGNvbnN0IHNlc3Npb24gPSBjb250ZXh0LnNlc3Npb24gYXMgU2Vzc2lvbjtcblxuICBpZighc2Vzc2lvbj8udXNlcklkKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcihFcnJvclR5cGVzLklOVkFMSURfU0VTU0lPTik7XG4gIH1cblxuICByZXR1cm4gc2Vzc2lvbjtcbn07XG5cbmNvbnN0IGluaXRpYWxpemVBbmFseXRpY3NDb2xsZWN0aW9uID0gYXN5bmMgKGRhdGFiYXNlTmFtZT86IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBjYWNoZUtleSA9IGRhdGFiYXNlTmFtZSB8fCAncmVha3Rvcic7XG4gIGNvbnN0IGV4aXN0aW5nSW5pdGlhbGl6YXRpb24gPSBjb2xsZWN0aW9uSW5pdGlhbGl6YXRpb24uZ2V0KGNhY2hlS2V5KTtcblxuICBpZihleGlzdGluZ0luaXRpYWxpemF0aW9uKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nSW5pdGlhbGl6YXRpb247XG4gIH1cblxuICBjb25zdCBpbml0aWFsaXphdGlvbiA9IChhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihkYXRhYmFzZU5hbWUpO1xuICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBkYXRhYmFzZS5jb2xsZWN0aW9uKENPTExFQ1RJT05TLkFOQUxZVElDUyk7XG5cbiAgICBpZighYXdhaXQgY29sbGVjdGlvbi5leGlzdHMoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZGF0YWJhc2UuY3JlYXRlQ29sbGVjdGlvbihDT0xMRUNUSU9OUy5BTkFMWVRJQ1MpO1xuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBpZighYXdhaXQgY29sbGVjdGlvbi5leGlzdHMoKSkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgY29sbGVjdGlvbi5lbnN1cmVJbmRleCh7ZmllbGRzOiBbJ2FuYWx5dGljc0lkJ10sIHR5cGU6ICdwZXJzaXN0ZW50JywgdW5pcXVlOiB0cnVlfSk7XG4gICAgYXdhaXQgY29sbGVjdGlvbi5lbnN1cmVJbmRleCh7ZmllbGRzOiBbJ2FwcElkJ10sIHR5cGU6ICdwZXJzaXN0ZW50JywgdW5pcXVlOiB0cnVlfSk7XG4gIH0pKCk7XG5cbiAgY29sbGVjdGlvbkluaXRpYWxpemF0aW9uLnNldChjYWNoZUtleSwgaW5pdGlhbGl6YXRpb24pO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgaW5pdGlhbGl6YXRpb247XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBjb2xsZWN0aW9uSW5pdGlhbGl6YXRpb24uZGVsZXRlKGNhY2hlS2V5KTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuY29uc3QgZ2V0UnVtQ2xpZW50ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBSVU1DbGllbnQgPT4ge1xuICBjb25zdCBhd3NDb25maWc6IEF3c0NvbmZpZyA9IGNvbnRleHQuY29uZmlnPy5hd3MgfHwgQ29uZmlnLmdldDxBd3NDb25maWc+KCdhd3MnLCB7fSk7XG4gIGNvbnN0IHthY2Nlc3NLZXlJZCwgc2VjcmV0QWNjZXNzS2V5LCBzZXNzaW9uVG9rZW59ID0gYXdzQ29uZmlnLmNyZWRlbnRpYWxzIHx8IHt9O1xuICBjb25zdCB1c2VzUnVudGltZUNyZWRlbnRpYWxzID0gQm9vbGVhbihcbiAgICBwcm9jZXNzLmVudi5BV1NfU0VTU0lPTl9UT0tFTiAmJlxuICAgIGFjY2Vzc0tleUlkID09PSBwcm9jZXNzLmVudi5BV1NfQUNDRVNTX0tFWV9JRCAmJlxuICAgIHNlY3JldEFjY2Vzc0tleSA9PT0gcHJvY2Vzcy5lbnYuQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZXG4gICk7XG4gIGNvbnN0IGNyZWRlbnRpYWxzID0gYWNjZXNzS2V5SWQgJiYgc2VjcmV0QWNjZXNzS2V5ICYmICF1c2VzUnVudGltZUNyZWRlbnRpYWxzID8ge1xuICAgIGFjY2Vzc0tleUlkLFxuICAgIHNlY3JldEFjY2Vzc0tleSxcbiAgICAuLi4oc2Vzc2lvblRva2VuID8ge3Nlc3Npb25Ub2tlbn0gOiB7fSlcbiAgfSA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4gbmV3IFJVTUNsaWVudCh7XG4gICAgLi4uKGNyZWRlbnRpYWxzID8ge2NyZWRlbnRpYWxzfSA6IHt9KSxcbiAgICAuLi4oYXdzQ29uZmlnLnJlZ2lvbiA/IHtyZWdpb246IGF3c0NvbmZpZy5yZWdpb259IDoge30pXG4gIH0pO1xufTtcblxuY29uc3QgZmluZEF3c01vbml0b3IgPSBhc3luYyAoXG4gIGNsaWVudDogUlVNQ2xpZW50LFxuICBtb25pdG9yTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPHtkb21haW4/OiBzdHJpbmc7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZ30gfCBudWxsPiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuc2VuZChuZXcgR2V0QXBwTW9uaXRvckNvbW1hbmQoe05hbWU6IG1vbml0b3JOYW1lfSkpO1xuICAgIGNvbnN0IG1vbml0b3JJZCA9IG5vcm1hbGl6ZVRleHQocmVzcG9uc2UuQXBwTW9uaXRvcj8uSWQsIDM2KTtcblxuICAgIHJldHVybiBtb25pdG9ySWQgPyB7XG4gICAgICBkb21haW46IG5vcm1hbGl6ZURvbWFpbihyZXNwb25zZS5BcHBNb25pdG9yPy5Eb21haW4pLFxuICAgICAgaWQ6IG1vbml0b3JJZCxcbiAgICAgIG5hbWU6IG5vcm1hbGl6ZVRleHQocmVzcG9uc2UuQXBwTW9uaXRvcj8uTmFtZSB8fCBtb25pdG9yTmFtZSwgTUFYX01PTklUT1JfTkFNRV9MRU5HVEgpXG4gICAgfSA6IG51bGw7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZigoZXJyb3IgYXMge25hbWU/OiBzdHJpbmd9KS5uYW1lID09PSAnUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbicpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5jb25zdCBmaW5kT3JDcmVhdGVBd3NNb25pdG9yID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBhcHBJZDogc3RyaW5nLFxuICBkb21haW46IHN0cmluZyxcbiAgbW9uaXRvck5hbWU6IHN0cmluZ1xuKTogUHJvbWlzZTx7ZG9tYWluOiBzdHJpbmc7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZ30+ID0+IHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0UnVtQ2xpZW50KGNvbnRleHQpO1xuICBjb25zdCBleGlzdGluZ01vbml0b3IgPSBhd2FpdCBmaW5kQXdzTW9uaXRvcihjbGllbnQsIG1vbml0b3JOYW1lKTtcblxuICBpZihleGlzdGluZ01vbml0b3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tYWluOiBleGlzdGluZ01vbml0b3IuZG9tYWluIHx8IGRvbWFpbixcbiAgICAgIGlkOiBleGlzdGluZ01vbml0b3IuaWQsXG4gICAgICBuYW1lOiBleGlzdGluZ01vbml0b3IubmFtZVxuICAgIH07XG4gIH1cblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBDcmVhdGVBcHBNb25pdG9yQ29tbWFuZCh7XG4gICAgQ3VzdG9tRXZlbnRzOiB7U3RhdHVzOiAnRU5BQkxFRCd9LFxuICAgIEN3TG9nRW5hYmxlZDogZmFsc2UsXG4gICAgRG9tYWluOiBkb21haW4sXG4gICAgTmFtZTogbW9uaXRvck5hbWUsXG4gICAgUGxhdGZvcm06ICdXZWInLFxuICAgIFRhZ3M6IHthcHBJZCwgbWFuYWdlZEJ5OiAncmVha3Rvcid9XG4gIH0pKTtcbiAgY29uc3QgbW9uaXRvcklkID0gbm9ybWFsaXplVGV4dChyZXNwb25zZS5JZCwgMzYpO1xuXG4gIGlmKCFtb25pdG9ySWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdpbnZhbGlkX3J1bV9tb25pdG9yJyk7XG4gIH1cblxuICByZXR1cm4ge2RvbWFpbiwgaWQ6IG1vbml0b3JJZCwgbmFtZTogbW9uaXRvck5hbWV9O1xufTtcblxuY29uc3QgcGFyc2VNb25pdG9ySW5wdXQgPSAoXG4gIGlucHV0OiBDcmVhdGVBbmFseXRpY3NNb25pdG9ySW5wdXRUeXBlXG4pOiB7YXBwSWQ6IHN0cmluZzsgYXBwTmFtZTogc3RyaW5nOyBkb21haW46IHN0cmluZzsgbW9uaXRvck5hbWU6IHN0cmluZ30gPT4ge1xuICBjb25zdCBhcHBJZCA9IG5vcm1hbGl6ZVRleHQoaW5wdXQ/LmFwcElkLCBNQVhfQVBQX0lEX0xFTkdUSCk7XG4gIGNvbnN0IGFwcE5hbWUgPSBub3JtYWxpemVUZXh0KGlucHV0Py5hcHBOYW1lIHx8IGlucHV0Py5tb25pdG9yTmFtZSB8fCBhcHBJZCwgTUFYX01PTklUT1JfTkFNRV9MRU5HVEgpO1xuICBjb25zdCBkb21haW4gPSBub3JtYWxpemVEb21haW4oaW5wdXQ/LmRvbWFpbik7XG4gIGNvbnN0IG1vbml0b3JOYW1lID0gbm9ybWFsaXplTW9uaXRvck5hbWUoaW5wdXQ/Lm1vbml0b3JOYW1lLCBhcHBJZCk7XG5cbiAgaWYoIWFwcElkIHx8ICFkb21haW4gfHwgIW1vbml0b3JOYW1lKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcihFcnJvclR5cGVzLklOVkFMSURfQVJHVU1FTlRTKTtcbiAgfVxuXG4gIHJldHVybiB7YXBwSWQsIGFwcE5hbWUsIGRvbWFpbiwgbW9uaXRvck5hbWV9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFuYWx5dGljc0J5QXBwSWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGFwcElkSW5wdXQ6IHN0cmluZ1xuKTogUHJvbWlzZTxBbmFseXRpY3NUeXBlIHwgbnVsbD4gPT4ge1xuICByZXF1aXJlQWRtaW4oY29udGV4dCk7XG4gIGNvbnN0IGFwcElkID0gbm9ybWFsaXplVGV4dChhcHBJZElucHV0LCBNQVhfQVBQX0lEX0xFTkdUSCk7XG5cbiAgaWYoIWFwcElkKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcihFcnJvclR5cGVzLklOVkFMSURfQVJHVU1FTlRTKTtcbiAgfVxuXG4gIGF3YWl0IGluaXRpYWxpemVBbmFseXRpY3NDb2xsZWN0aW9uKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgcmV0dXJuIGdldEl0ZW1CeTxBbmFseXRpY3NUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5BTkFMWVRJQ1MsIHthcHBJZH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFuYWx5dGljc0NvbmZpZ3VyYXRpb24gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGFwcElkSW5wdXQ6IHN0cmluZ1xuKTogUHJvbWlzZTxBbmFseXRpY3NDb25maWd1cmF0aW9uVHlwZSB8IG51bGw+ID0+IHtcbiAgY29uc3QgYXBwSWQgPSBub3JtYWxpemVUZXh0KGFwcElkSW5wdXQsIE1BWF9BUFBfSURfTEVOR1RIKTtcblxuICBpZighYXBwSWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BUkdVTUVOVFMpO1xuICB9XG5cbiAgYXdhaXQgaW5pdGlhbGl6ZUFuYWx5dGljc0NvbGxlY3Rpb24oY29udGV4dC5kYXRhYmFzZU5hbWUpO1xuICBjb25zdCBhbmFseXRpY3MgPSBhd2FpdCBnZXRJdGVtQnk8QW5hbHl0aWNzVHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuQU5BTFlUSUNTLCB7YXBwSWR9KTtcblxuICByZXR1cm4gYW5hbHl0aWNzID8ge2FuYWx5dGljc0lkOiBhbmFseXRpY3MuYW5hbHl0aWNzSWQsIGFwcElkOiBhbmFseXRpY3MuYXBwSWR9IDogbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbmFseXRpY3NCeUlkID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBhbmFseXRpY3NJZElucHV0OiBzdHJpbmdcbik6IFByb21pc2U8QW5hbHl0aWNzVHlwZSB8IG51bGw+ID0+IHtcbiAgY29uc3QgYW5hbHl0aWNzSWQgPSBub3JtYWxpemVUZXh0KGFuYWx5dGljc0lkSW5wdXQsIDM2KTtcblxuICBpZighYW5hbHl0aWNzSWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGF3YWl0IGluaXRpYWxpemVBbmFseXRpY3NDb2xsZWN0aW9uKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgcmV0dXJuIGdldEl0ZW1CeTxBbmFseXRpY3NUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5BTkFMWVRJQ1MsIHthbmFseXRpY3NJZH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUFuYWx5dGljc01vbml0b3IgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGlucHV0OiBDcmVhdGVBbmFseXRpY3NNb25pdG9ySW5wdXRUeXBlXG4pOiBQcm9taXNlPEFuYWx5dGljc1R5cGU+ID0+IHtcbiAgY29uc3Qgc2Vzc2lvbiA9IHJlcXVpcmVTZXNzaW9uKGNvbnRleHQpO1xuICBjb25zdCB7YXBwSWQsIGFwcE5hbWUsIGRvbWFpbiwgbW9uaXRvck5hbWV9ID0gcGFyc2VNb25pdG9ySW5wdXQoaW5wdXQpO1xuICBhd2FpdCBpbml0aWFsaXplQW5hbHl0aWNzQ29sbGVjdGlvbihjb250ZXh0LmRhdGFiYXNlTmFtZSk7XG4gIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgZ2V0SXRlbUJ5PEFuYWx5dGljc1R5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLkFOQUxZVElDUywge2FwcElkfSk7XG5cbiAgaWYoZXhpc3RpbmcpIHtcbiAgICBpZihpc0FkbWluVXNlcihzZXNzaW9uKSB8fCAoZXhpc3RpbmcudXNlcklkcyB8fCBbXSkuaW5jbHVkZXMoc2Vzc2lvbi51c2VySWQpKSB7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcihFcnJvclR5cGVzLklOVkFMSURfU0VTU0lPTik7XG4gIH1cblxuICBjb25zdCBtb25pdG9yID0gYXdhaXQgZmluZE9yQ3JlYXRlQXdzTW9uaXRvcihjb250ZXh0LCBhcHBJZCwgZG9tYWluLCBtb25pdG9yTmFtZSk7XG4gIHJldHVybiBhZGRJdGVtPEFuYWx5dGljc1R5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLkFOQUxZVElDUywge1xuICAgIF9rZXk6IGdldERvY3VtZW50S2V5KGFwcElkKSxcbiAgICBhbmFseXRpY3NJZDogcmFuZG9tVVVJRCgpLFxuICAgIGFwcElkLFxuICAgIGFwcE5hbWUsXG4gICAgZG9tYWluOiBtb25pdG9yLmRvbWFpbixcbiAgICBtb25pdG9ySWQ6IG1vbml0b3IuaWQsXG4gICAgbW9uaXRvck5hbWU6IG1vbml0b3IubmFtZSxcbiAgICB1c2VySWRzOiBbc2Vzc2lvbi51c2VySWRdXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlZ2VuZXJhdGVBbmFseXRpY3NJZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgYW5hbHl0aWNzSWRJbnB1dDogc3RyaW5nXG4pOiBQcm9taXNlPEFuYWx5dGljc1R5cGU+ID0+IHtcbiAgY29uc3Qgc2Vzc2lvbiA9IHJlcXVpcmVTZXNzaW9uKGNvbnRleHQpO1xuICBjb25zdCBhbmFseXRpY3NJZCA9IG5vcm1hbGl6ZVRleHQoYW5hbHl0aWNzSWRJbnB1dCwgMzYpO1xuXG4gIGlmKCFhbmFseXRpY3NJZCkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FSR1VNRU5UUyk7XG4gIH1cblxuICBhd2FpdCBpbml0aWFsaXplQW5hbHl0aWNzQ29sbGVjdGlvbihjb250ZXh0LmRhdGFiYXNlTmFtZSk7XG4gIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgZ2V0SXRlbUJ5PEFuYWx5dGljc1R5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLkFOQUxZVElDUywge2FuYWx5dGljc0lkfSk7XG4gIGNvbnN0IGhhc0FjY2VzcyA9IGV4aXN0aW5nICYmIChcbiAgICBpc0FkbWluVXNlcihzZXNzaW9uKSB8fCAoZXhpc3RpbmcudXNlcklkcyB8fCBbXSkuaW5jbHVkZXMoc2Vzc2lvbi51c2VySWQpXG4gICk7XG5cbiAgaWYoIWV4aXN0aW5nPy5fa2V5IHx8ICFoYXNBY2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdpbnZhbGlkX3J1bV9hcHAnKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVJdGVtPEFuYWx5dGljc1R5cGU+KFxuICAgIGNvbnRleHQsXG4gICAgQ09MTEVDVElPTlMuQU5BTFlUSUNTLFxuICAgIGV4aXN0aW5nLl9rZXksXG4gICAge2FuYWx5dGljc0lkOiByYW5kb21VVUlEKCl9XG4gICk7XG59O1xuXG50eXBlIEF3c1J1bVJlY29yZCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYge1xuICBldmVudF9kZXRhaWxzPzogdW5rbm93bjtcbiAgbWV0YWRhdGE/OiB1bmtub3duO1xufTtcblxudHlwZSBOb3JtYWxpemVkUnVtRXZlbnQgPSBBbmFseXRpY3NFdmVudFR5cGUgJiB7cmVhZG9ubHkgYXBwSWQ6IHN0cmluZ307XG5cbmNvbnN0IHBhcnNlSnNvblJlY29yZCA9ICh2YWx1ZTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgaWYodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH1cblxuICBpZih0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICByZXR1cm4gcGFyc2VkICYmIHR5cGVvZiBwYXJzZWQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHBhcnNlZClcbiAgICAgID8gcGFyc2VkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICA6IHt9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4ge307XG4gIH1cbn07XG5cbmNvbnN0IGdldFByb3BlcnR5ID0gKFxuICBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBhbGlhc2VzOiByZWFkb25seSBzdHJpbmdbXVxuKTogdW5rbm93biA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRBbGlhc2VzID0gbmV3IFNldChhbGlhc2VzLm1hcCgoYWxpYXMpID0+IGFsaWFzLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTldL2csICcnKSkpO1xuICBjb25zdCBlbnRyaWVzID0gWy4uLk9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpLCAuLi5PYmplY3QuZW50cmllcyhtZXRhZGF0YSldO1xuICByZXR1cm4gZW50cmllcy5maW5kKChba2V5XSkgPT4gbm9ybWFsaXplZEFsaWFzZXMuaGFzKGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05XS9nLCAnJykpKT8uWzFdO1xufTtcblxuY29uc3Qgbm9ybWFsaXplUnVtRXZlbnQgPSAocmF3RXZlbnQ6IHN0cmluZyk6IE5vcm1hbGl6ZWRSdW1FdmVudCB8IG51bGwgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHNvdXJjZSA9IEpTT04ucGFyc2UocmF3RXZlbnQpIGFzIEF3c1J1bVJlY29yZDtcbiAgICBjb25zdCBkZXRhaWxzID0gcGFyc2VKc29uUmVjb3JkKHNvdXJjZS5ldmVudF9kZXRhaWxzKTtcbiAgICBjb25zdCBtZXRhZGF0YSA9IHBhcnNlSnNvblJlY29yZChzb3VyY2UubWV0YWRhdGEpO1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSBwYXJzZUpzb25SZWNvcmQoZGV0YWlscy5wcm9wZXJ0aWVzKTtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBOdW1iZXIoc291cmNlLmV2ZW50X3RpbWVzdGFtcCB8fCAwKTtcblxuICAgIGlmKCFOdW1iZXIuaXNGaW5pdGUodGltZXN0YW1wKSB8fCB0aW1lc3RhbXAgPD0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZ2V0VGV4dCA9IChhbGlhc2VzOiByZWFkb25seSBzdHJpbmdbXSwgZmFsbGJhY2sgPSAnJyk6IHN0cmluZyA9PlxuICAgICAgbm9ybWFsaXplVGV4dChnZXRQcm9wZXJ0eShwcm9wZXJ0aWVzLCBtZXRhZGF0YSwgYWxpYXNlcykgPz8gZmFsbGJhY2ssIDI1Nik7XG4gICAgY29uc3QgZHVyYXRpb25WYWx1ZSA9IE51bWJlcihnZXRQcm9wZXJ0eShwcm9wZXJ0aWVzLCBtZXRhZGF0YSwgW1xuICAgICAgJ2R1cmF0aW9uJyxcbiAgICAgICdkdXJhdGlvbk1zJyxcbiAgICAgICdsYXRlbmN5JyxcbiAgICAgICdsb2FkVGltZScsXG4gICAgICAncGFnZUxvYWRUaW1lJ1xuICAgIF0pIHx8IDApO1xuICAgIGNvbnN0IHBhdGggPSBub3JtYWxpemVUZXh0KGRldGFpbHMucGF0aCwgMjU2KTtcbiAgICBjb25zdCB0eXBlID0gbm9ybWFsaXplVGV4dChzb3VyY2UuZXZlbnRfdHlwZSwgMjU2KTtcblxuICAgIHJldHVybiB7XG4gICAgICBhcHBJZDogbm9ybWFsaXplVGV4dChkZXRhaWxzLmFwcElkIHx8IG1ldGFkYXRhLmFwcGxpY2F0aW9uSWQsIE1BWF9BUFBfSURfTEVOR1RIKSxcbiAgICAgIGJyb3dzZXJMYW5ndWFnZTogZ2V0VGV4dChbJ2Jyb3dzZXJMYW5ndWFnZSddLCAnVW5rbm93bicpLFxuICAgICAgYnJvd3Nlck5hbWU6IGdldFRleHQoWydicm93c2VyTmFtZSddLCAnVW5rbm93bicpLFxuICAgICAgYnJvd3NlclZlcnNpb246IGdldFRleHQoWydicm93c2VyVmVyc2lvbiddKSxcbiAgICAgIGRldmljZVR5cGU6IGdldFRleHQoWydkZXZpY2VUeXBlJ10sICdVbmtub3duJyksXG4gICAgICBkdXJhdGlvbjogTnVtYmVyLmlzRmluaXRlKGR1cmF0aW9uVmFsdWUpICYmIGR1cmF0aW9uVmFsdWUgPiAwID8gZHVyYXRpb25WYWx1ZSA6IDAsXG4gICAgICBldmVudElkOiBub3JtYWxpemVUZXh0KHNvdXJjZS5ldmVudF9pZCwgMTI4KSxcbiAgICAgIGludGVyYWN0aW9uOiBnZXRUZXh0KFsnaW50ZXJhY3Rpb24nXSwgbm9ybWFsaXplVGV4dChkZXRhaWxzLm5hbWUgfHwgdHlwZSwgMTI4KSksXG4gICAgICBuYW1lOiBub3JtYWxpemVUZXh0KGRldGFpbHMubmFtZSB8fCB0eXBlLCAxMjgpLFxuICAgICAgb3NOYW1lOiBnZXRUZXh0KFsnb3NOYW1lJ10sICdVbmtub3duJyksXG4gICAgICBvc1ZlcnNpb246IGdldFRleHQoWydvc1ZlcnNpb24nXSksXG4gICAgICBvdXRjb21lOiBnZXRUZXh0KFsnb3V0Y29tZSddKSxcbiAgICAgIHBhZ2VJZDogZ2V0VGV4dChbJ3BhZ2VJZCcsICdwYWdlSUQnXSwgcGF0aCB8fCAnVW5rbm93bicpLFxuICAgICAgcGFyZW50UGFnZTogZ2V0VGV4dChbJ3BhcmVudFBhZ2VJZCcsICdwYXJlbnRQYWdlJ10pLFxuICAgICAgcGF0aCxcbiAgICAgIHNlc3Npb25JZDogbm9ybWFsaXplVGV4dChzb3VyY2Uuc2Vzc2lvbklkIHx8IHBhcnNlSnNvblJlY29yZChzb3VyY2UudXNlcl9kZXRhaWxzKS5zZXNzaW9uSWQsIDEyOCksXG4gICAgICB0aW1lc3RhbXAsXG4gICAgICB0eXBlLFxuICAgICAgdmlld0lkOiBnZXRUZXh0KFsndmlld0lkJ10pXG4gICAgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbmNvbnN0IGNyZWF0ZUJyZWFrZG93biA9ICh2YWx1ZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCB0b3RhbDogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IGNvdW50cyA9IHZhbHVlcy5yZWR1Y2U8TWFwPHN0cmluZywgbnVtYmVyPj4oKHJlc3VsdCwgdmFsdWUpID0+IHtcbiAgICBjb25zdCBsYWJlbCA9IHZhbHVlIHx8ICdVbmtub3duJztcbiAgICByZXN1bHQuc2V0KGxhYmVsLCAocmVzdWx0LmdldChsYWJlbCkgfHwgMCkgKyAxKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCBuZXcgTWFwKCkpO1xuXG4gIHJldHVybiBBcnJheS5mcm9tKGNvdW50cywgKFtsYWJlbCwgY291bnRdKSA9PiAoe1xuICAgIGNvdW50LFxuICAgIGxhYmVsLFxuICAgIHBlcmNlbnRhZ2U6IHRvdGFsID4gMCA/IE1hdGgucm91bmQoKGNvdW50IC8gdG90YWwpICogMTAwMCkgLyAxMCA6IDBcbiAgfSkpLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiByaWdodC5jb3VudCAtIGxlZnQuY291bnQgfHwgbGVmdC5sYWJlbC5sb2NhbGVDb21wYXJlKHJpZ2h0LmxhYmVsKSk7XG59O1xuXG5jb25zdCBwZXJjZW50aWxlID0gKHZhbHVlczogcmVhZG9ubHkgbnVtYmVyW10sIHBlcmNlbnRpbGVWYWx1ZTogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgaWYodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3Qgc29ydGVkID0gdmFsdWVzLnRvU29ydGVkKChsZWZ0LCByaWdodCkgPT4gbGVmdCAtIHJpZ2h0KTtcbiAgY29uc3QgaW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwocGVyY2VudGlsZVZhbHVlICogc29ydGVkLmxlbmd0aCkgLSAxKTtcbiAgcmV0dXJuIHNvcnRlZFtpbmRleF07XG59O1xuXG5jb25zdCBjcmVhdGVWaWV3UGVyZm9ybWFuY2UgPSAoZXZlbnRzOiByZWFkb25seSBOb3JtYWxpemVkUnVtRXZlbnRbXSkgPT4ge1xuICBjb25zdCB2aWV3cyA9IGV2ZW50cy5yZWR1Y2U8TWFwPHN0cmluZywgTm9ybWFsaXplZFJ1bUV2ZW50W10+PigocmVzdWx0LCBldmVudCkgPT4ge1xuICAgIGlmKFxuICAgICAgKGV2ZW50LnR5cGUgIT09ICd2aWV3X3BlcmZvcm1hbmNlJyAmJiBldmVudC5uYW1lICE9PSAndmlld19wZXJmb3JtYW5jZScpXG4gICAgICB8fCAhZXZlbnQudmlld0lkXG4gICAgICB8fCBldmVudC5vdXRjb21lID09PSAnY2FuY2VsbGVkJ1xuICAgICkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCBzYW1wbGVzID0gcmVzdWx0LmdldChldmVudC52aWV3SWQpIHx8IFtdO1xuICAgIHNhbXBsZXMucHVzaChldmVudCk7XG4gICAgcmVzdWx0LnNldChldmVudC52aWV3SWQsIHNhbXBsZXMpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIG5ldyBNYXAoKSk7XG5cbiAgcmV0dXJuIEFycmF5LmZyb20odmlld3MsIChbdmlld0lkLCBzYW1wbGVzXSkgPT4ge1xuICAgIGNvbnN0IGR1cmF0aW9ucyA9IHNhbXBsZXMubWFwKChldmVudCkgPT4gZXZlbnQuZHVyYXRpb24pO1xuICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSAob3V0Y29tZTogc3RyaW5nKTogbnVtYmVyID0+IE1hdGgucm91bmQoXG4gICAgICAoc2FtcGxlcy5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5vdXRjb21lID09PSBvdXRjb21lKS5sZW5ndGggLyBzYW1wbGVzLmxlbmd0aCkgKiAxMDAwXG4gICAgKSAvIDEwO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZhaWx1cmVSYXRlOiBwZXJjZW50YWdlKCdmYWlsdXJlJyksXG4gICAgICBwNTA6IHBlcmNlbnRpbGUoZHVyYXRpb25zLCAwLjUpLFxuICAgICAgcDc1OiBwZXJjZW50aWxlKGR1cmF0aW9ucywgMC43NSksXG4gICAgICBwOTU6IHBlcmNlbnRpbGUoZHVyYXRpb25zLCAwLjk1KSxcbiAgICAgIHNhbXBsZUNvdW50OiBzYW1wbGVzLmxlbmd0aCxcbiAgICAgIHRpbWVvdXRSYXRlOiBwZXJjZW50YWdlKCd0aW1lb3V0JyksXG4gICAgICB2aWV3SWRcbiAgICB9O1xuICB9KS5zb3J0KChsZWZ0LCByaWdodCkgPT4gcmlnaHQuc2FtcGxlQ291bnQgLSBsZWZ0LnNhbXBsZUNvdW50IHx8IGxlZnQudmlld0lkLmxvY2FsZUNvbXBhcmUocmlnaHQudmlld0lkKSk7XG59O1xuXG5jb25zdCBnZXRBdXRob3JpemVkQW5hbHl0aWNzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBhbmFseXRpY3NJZDogc3RyaW5nXG4pOiBQcm9taXNlPEFuYWx5dGljc1R5cGU+ID0+IHtcbiAgY29uc3Qgc2Vzc2lvbiA9IHJlcXVpcmVTZXNzaW9uKGNvbnRleHQpO1xuICBjb25zdCBhbmFseXRpY3MgPSBhd2FpdCBnZXRBbmFseXRpY3NCeUlkKGNvbnRleHQsIGFuYWx5dGljc0lkKTtcbiAgY29uc3QgaGFzQWNjZXNzID0gYW5hbHl0aWNzICYmIChcbiAgICBpc0FkbWluVXNlcihzZXNzaW9uKSB8fCAoYW5hbHl0aWNzLnVzZXJJZHMgfHwgW10pLmluY2x1ZGVzKHNlc3Npb24udXNlcklkKVxuICApO1xuXG4gIGlmKCFhbmFseXRpY3MgfHwgIWhhc0FjY2Vzcykge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX1NFU1NJT04pO1xuICB9XG5cbiAgcmV0dXJuIGFuYWx5dGljcztcbn07XG5cbmNvbnN0IGdldEFuYWx5dGljc0FwcE5hbWUgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgYW5hbHl0aWNzOiBBbmFseXRpY3NUeXBlKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgaWYoYW5hbHl0aWNzLmFwcE5hbWUpIHtcbiAgICByZXR1cm4gYW5hbHl0aWNzLmFwcE5hbWU7XG4gIH1cblxuICBjb25zdCBhcHAgPSBhd2FpdCBnZXRJdGVtQnk8QXBwVHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuQVBQUywge1xuICAgIGNvbmRpdGlvbnM6IFtcbiAgICAgIHtmaWVsZDogJ2FwcElkJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBhbmFseXRpY3MuYXBwSWR9LFxuICAgICAge2ZpZWxkOiAnX2tleScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogYW5hbHl0aWNzLmFwcElkfVxuICAgIF0sXG4gICAgbG9naWM6ICdPUidcbiAgfSk7XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZVRleHQoYXBwPy5kaXNwbGF5TmFtZSB8fCBhcHA/Lm5hbWUgfHwgYW5hbHl0aWNzLm1vbml0b3JOYW1lIHx8IGFuYWx5dGljcy5hcHBJZCwgTUFYX01PTklUT1JfTkFNRV9MRU5HVEgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEF2YWlsYWJsZUFuYWx5dGljcyA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxBbmFseXRpY3NUeXBlW10+ID0+IHtcbiAgY29uc3Qgc2Vzc2lvbiA9IHJlcXVpcmVTZXNzaW9uKGNvbnRleHQpO1xuICBhd2FpdCBpbml0aWFsaXplQW5hbHl0aWNzQ29sbGVjdGlvbihjb250ZXh0LmRhdGFiYXNlTmFtZSk7XG4gIGNvbnN0IGFuYWx5dGljcyA9IGF3YWl0IGdldExpc3RCeTxBbmFseXRpY3NUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5BTkFMWVRJQ1MsIHt9LCB7XG4gICAgc29ydDogW3tkaXJlY3Rpb246ICdBU0MnLCBmaWVsZDogJ2FwcE5hbWUnfV1cbiAgfSk7XG5cbiAgY29uc3QgYXZhaWxhYmxlID0gYW5hbHl0aWNzLmZpbHRlcigoaXRlbSkgPT5cbiAgICBpc0FkbWluVXNlcihzZXNzaW9uKSB8fCAoaXRlbS51c2VySWRzIHx8IFtdKS5pbmNsdWRlcyhzZXNzaW9uLnVzZXJJZCkpO1xuXG4gIGNvbnN0IGVucmljaGVkID0gYXdhaXQgUHJvbWlzZS5hbGwoYXZhaWxhYmxlLm1hcChhc3luYyAoaXRlbSkgPT4gKHtcbiAgICAuLi5pdGVtLFxuICAgIGFwcE5hbWU6IGF3YWl0IGdldEFuYWx5dGljc0FwcE5hbWUoY29udGV4dCwgaXRlbSksXG4gICAgdXNlcklkczogaXRlbS51c2VySWRzIHx8IFtdXG4gIH0pKSk7XG5cbiAgcmV0dXJuIGVucmljaGVkLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PlxuICAgIChsZWZ0LmFwcE5hbWUgfHwgJycpLmxvY2FsZUNvbXBhcmUocmlnaHQuYXBwTmFtZSB8fCAnJykpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldEFuYWx5dGljc0FjY2VzcyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgYW5hbHl0aWNzSWRJbnB1dDogc3RyaW5nLFxuICB1c2VySWRzSW5wdXQ6IHJlYWRvbmx5IHN0cmluZ1tdXG4pOiBQcm9taXNlPEFuYWx5dGljc1R5cGU+ID0+IHtcbiAgcmVxdWlyZUFkbWluKGNvbnRleHQpO1xuICBjb25zdCBhbmFseXRpY3NJZCA9IG5vcm1hbGl6ZVRleHQoYW5hbHl0aWNzSWRJbnB1dCwgMzYpO1xuICBjb25zdCBhbmFseXRpY3MgPSBhd2FpdCBnZXRBbmFseXRpY3NCeUlkKGNvbnRleHQsIGFuYWx5dGljc0lkKTtcblxuICBpZighYW5hbHl0aWNzPy5fa2V5KSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcignaW52YWxpZF9ydW1fYXBwJyk7XG4gIH1cblxuICBjb25zdCB1c2VySWRzID0gQXJyYXkuZnJvbShuZXcgU2V0KCh1c2VySWRzSW5wdXQgfHwgW10pXG4gICAgLm1hcCgodXNlcklkKSA9PiBub3JtYWxpemVUZXh0KHVzZXJJZCwgMTI4KSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pKSlcbiAgICAuc2xpY2UoMCwgMTAwKTtcblxuICByZXR1cm4gdXBkYXRlSXRlbTxBbmFseXRpY3NUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5BTkFMWVRJQ1MsIGFuYWx5dGljcy5fa2V5LCB7dXNlcklkc30pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFuYWx5dGljc0Rhc2hib2FyZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgYW5hbHl0aWNzSWRJbnB1dDogc3RyaW5nLFxuICByYW5nZURheXNJbnB1dDogbnVtYmVyXG4pOiBQcm9taXNlPEFuYWx5dGljc0Rhc2hib2FyZFR5cGU+ID0+IHtcbiAgY29uc3QgYW5hbHl0aWNzSWQgPSBub3JtYWxpemVUZXh0KGFuYWx5dGljc0lkSW5wdXQsIDM2KTtcbiAgY29uc3QgcmFuZ2VEYXlzID0gTWF0aC5mbG9vcihOdW1iZXIocmFuZ2VEYXlzSW5wdXQpKTtcblxuICBpZighYW5hbHl0aWNzSWQgfHwgIVZBTElEX1JBTkdFX0RBWVMuaGFzKHJhbmdlRGF5cykpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BUkdVTUVOVFMpO1xuICB9XG5cbiAgY29uc3QgYW5hbHl0aWNzID0gYXdhaXQgZ2V0QXV0aG9yaXplZEFuYWx5dGljcyhjb250ZXh0LCBhbmFseXRpY3NJZCk7XG4gIGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpO1xuICBjb25zdCBzdGFydFRpbWUgPSBlbmRUaW1lIC0gcmFuZ2VEYXlzICogMjQgKiA2MCAqIDYwICogMTAwMCArIChyYW5nZURheXMgPT09IDMwID8gNjBfMDAwIDogMCk7XG4gIGNvbnN0IGNsaWVudCA9IGdldFJ1bUNsaWVudChjb250ZXh0KTtcbiAgY29uc3QgcmF3RXZlbnRzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgbmV4dFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxldCBwYWdlID0gMDtcblxuICBkbyB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuc2VuZChuZXcgR2V0QXBwTW9uaXRvckRhdGFDb21tYW5kKHtcbiAgICAgIE1heFJlc3VsdHM6IE1BWF9SVU1fUkVTVUxUUyxcbiAgICAgIE5hbWU6IGFuYWx5dGljcy5tb25pdG9yTmFtZSxcbiAgICAgIC4uLihuZXh0VG9rZW4gPyB7TmV4dFRva2VuOiBuZXh0VG9rZW59IDoge30pLFxuICAgICAgVGltZVJhbmdlOiB7QWZ0ZXI6IHN0YXJ0VGltZSwgQmVmb3JlOiBlbmRUaW1lfVxuICAgIH0pKTtcbiAgICByYXdFdmVudHMucHVzaCguLi4ocmVzcG9uc2UuRXZlbnRzIHx8IFtdKSk7XG4gICAgbmV4dFRva2VuID0gcmVzcG9uc2UuTmV4dFRva2VuO1xuICAgIHBhZ2UgKz0gMTtcbiAgfSB3aGlsZShuZXh0VG9rZW4gJiYgcGFnZSA8IE1BWF9SVU1fUEFHRVMpO1xuXG4gIGNvbnN0IGV2ZW50cyA9IHJhd0V2ZW50c1xuICAgIC5tYXAobm9ybWFsaXplUnVtRXZlbnQpXG4gICAgLmZpbHRlcigoZXZlbnQpOiBldmVudCBpcyBOb3JtYWxpemVkUnVtRXZlbnQgPT4gQm9vbGVhbihldmVudCAmJiBldmVudC5hcHBJZCA9PT0gYW5hbHl0aWNzLmFwcElkKSlcbiAgICAuc29ydCgobGVmdCwgcmlnaHQpID0+IHJpZ2h0LnRpbWVzdGFtcCAtIGxlZnQudGltZXN0YW1wKTtcbiAgY29uc3Qgc2Vzc2lvbnMgPSBuZXcgU2V0KGV2ZW50cy5tYXAoKGV2ZW50KSA9PiBldmVudC5zZXNzaW9uSWQpLmZpbHRlcihCb29sZWFuKSk7XG4gIGNvbnN0IGludGVyYWN0aW9uRXZlbnRzID0gZXZlbnRzLmZpbHRlcigoZXZlbnQpID0+IChcbiAgICBldmVudC50eXBlICE9PSAncGFnZV92aWV3JyAmJiBldmVudC50eXBlICE9PSAndmlld19wZXJmb3JtYW5jZSdcbiAgKSk7XG4gIGNvbnN0IGVycm9yRXZlbnRzID0gZXZlbnRzLmZpbHRlcigoZXZlbnQpID0+IC9lcnJvcnxleGNlcHRpb258ZmFpbHVyZS9pLnRlc3QoYCR7ZXZlbnQudHlwZX0gJHtldmVudC5uYW1lfWApKTtcbiAgY29uc3QgZHVyYXRpb25zID0gZXZlbnRzLm1hcCgoZXZlbnQpID0+IGV2ZW50LmR1cmF0aW9uKS5maWx0ZXIoKGR1cmF0aW9uKSA9PiBkdXJhdGlvbiA+IDApO1xuICBjb25zdCBidWNrZXRTaXplID0gcmFuZ2VEYXlzID09PSAxID8gNjAgKiA2MCAqIDEwMDAgOiAyNCAqIDYwICogNjAgKiAxMDAwO1xuICBjb25zdCBidWNrZXRzID0gbmV3IE1hcDxudW1iZXIsIHtlcnJvcnM6IG51bWJlcjsgZXZlbnRzOiBudW1iZXI7IGludGVyYWN0aW9uczogbnVtYmVyOyBzZXNzaW9uczogU2V0PHN0cmluZz59PigpO1xuXG4gIGZvcihsZXQgdGltZXN0YW1wID0gTWF0aC5mbG9vcihzdGFydFRpbWUgLyBidWNrZXRTaXplKSAqIGJ1Y2tldFNpemU7IHRpbWVzdGFtcCA8PSBlbmRUaW1lOyB0aW1lc3RhbXAgKz0gYnVja2V0U2l6ZSkge1xuICAgIGJ1Y2tldHMuc2V0KHRpbWVzdGFtcCwge2Vycm9yczogMCwgZXZlbnRzOiAwLCBpbnRlcmFjdGlvbnM6IDAsIHNlc3Npb25zOiBuZXcgU2V0KCl9KTtcbiAgfVxuXG4gIGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGJ1Y2tldHMuZ2V0KE1hdGguZmxvb3IoZXZlbnQudGltZXN0YW1wIC8gYnVja2V0U2l6ZSkgKiBidWNrZXRTaXplKTtcbiAgICBpZighYnVja2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGJ1Y2tldC5ldmVudHMgKz0gMTtcbiAgICBidWNrZXQuaW50ZXJhY3Rpb25zICs9IGV2ZW50LnR5cGUgPT09ICdwYWdlX3ZpZXcnIHx8IGV2ZW50LnR5cGUgPT09ICd2aWV3X3BlcmZvcm1hbmNlJyA/IDAgOiAxO1xuICAgIGJ1Y2tldC5lcnJvcnMgKz0gL2Vycm9yfGV4Y2VwdGlvbnxmYWlsdXJlL2kudGVzdChgJHtldmVudC50eXBlfSAke2V2ZW50Lm5hbWV9YCkgPyAxIDogMDtcbiAgICBpZihldmVudC5zZXNzaW9uSWQpIHtcbiAgICAgIGJ1Y2tldC5zZXNzaW9ucy5hZGQoZXZlbnQuc2Vzc2lvbklkKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgYW5hbHl0aWNzSWQ6IGFuYWx5dGljcy5hbmFseXRpY3NJZCxcbiAgICBhcHBJZDogYW5hbHl0aWNzLmFwcElkLFxuICAgIGFwcE5hbWU6IGF3YWl0IGdldEFuYWx5dGljc0FwcE5hbWUoY29udGV4dCwgYW5hbHl0aWNzKSxcbiAgICBhdmVyYWdlRHVyYXRpb246IGR1cmF0aW9ucy5sZW5ndGhcbiAgICAgID8gTWF0aC5yb3VuZChkdXJhdGlvbnMucmVkdWNlKCh0b3RhbCwgZHVyYXRpb24pID0+IHRvdGFsICsgZHVyYXRpb24sIDApIC8gZHVyYXRpb25zLmxlbmd0aClcbiAgICAgIDogMCxcbiAgICBicm93c2VyczogY3JlYXRlQnJlYWtkb3duKGV2ZW50cy5tYXAoKGV2ZW50KSA9PiBbZXZlbnQuYnJvd3Nlck5hbWUsIGV2ZW50LmJyb3dzZXJWZXJzaW9uXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpKSwgZXZlbnRzLmxlbmd0aCksXG4gICAgZGV2aWNlczogY3JlYXRlQnJlYWtkb3duKGV2ZW50cy5tYXAoKGV2ZW50KSA9PiBldmVudC5kZXZpY2VUeXBlKSwgZXZlbnRzLmxlbmd0aCksXG4gICAgZW5kVGltZSxcbiAgICBlcnJvckNvdW50OiBlcnJvckV2ZW50cy5sZW5ndGgsXG4gICAgZXZlbnRDb3VudDogZXZlbnRzLmxlbmd0aCxcbiAgICBnZW5lcmF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICBpbnRlcmFjdGlvbnM6IGNyZWF0ZUJyZWFrZG93bihpbnRlcmFjdGlvbkV2ZW50cy5tYXAoKGV2ZW50KSA9PiBldmVudC5pbnRlcmFjdGlvbiB8fCBldmVudC5uYW1lKSwgaW50ZXJhY3Rpb25FdmVudHMubGVuZ3RoKSxcbiAgICBsYW5ndWFnZXM6IGNyZWF0ZUJyZWFrZG93bihldmVudHMubWFwKChldmVudCkgPT4gZXZlbnQuYnJvd3Nlckxhbmd1YWdlKSwgZXZlbnRzLmxlbmd0aCksXG4gICAgbW9uaXRvcklkOiBhbmFseXRpY3MubW9uaXRvcklkLFxuICAgIG1vbml0b3JOYW1lOiBhbmFseXRpY3MubW9uaXRvck5hbWUsXG4gICAgb3BlcmF0aW5nU3lzdGVtczogY3JlYXRlQnJlYWtkb3duKGV2ZW50cy5tYXAoKGV2ZW50KSA9PiBbZXZlbnQub3NOYW1lLCBldmVudC5vc1ZlcnNpb25dLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJykpLCBldmVudHMubGVuZ3RoKSxcbiAgICBwYWdlczogY3JlYXRlQnJlYWtkb3duKGV2ZW50cy5tYXAoKGV2ZW50KSA9PiBldmVudC5wYWdlSWQgfHwgZXZlbnQucGF0aCksIGV2ZW50cy5sZW5ndGgpLFxuICAgIHBhZ2VWaWV3Q291bnQ6IGV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC50eXBlID09PSAncGFnZV92aWV3JykubGVuZ3RoLFxuICAgIHBhcnRpYWw6IEJvb2xlYW4obmV4dFRva2VuKSxcbiAgICBwZXJmb3JtYW5jZVNhbXBsZXM6IGR1cmF0aW9ucy5sZW5ndGgsXG4gICAgcmVjZW50RXZlbnRzOiBldmVudHMuc2xpY2UoMCwgMTAwKS5tYXAoKHthcHBJZDogX2FwcElkLCAuLi5ldmVudH0pID0+IGV2ZW50KSxcbiAgICBzZXNzaW9uQ291bnQ6IHNlc3Npb25zLnNpemUsXG4gICAgc3RhcnRUaW1lLFxuICAgIHRpbWVsaW5lOiBBcnJheS5mcm9tKGJ1Y2tldHMsIChbdGltZXN0YW1wLCBidWNrZXRdKSA9PiAoe1xuICAgICAgZXJyb3JzOiBidWNrZXQuZXJyb3JzLFxuICAgICAgZXZlbnRzOiBidWNrZXQuZXZlbnRzLFxuICAgICAgaW50ZXJhY3Rpb25zOiBidWNrZXQuaW50ZXJhY3Rpb25zLFxuICAgICAgc2Vzc2lvbnM6IGJ1Y2tldC5zZXNzaW9ucy5zaXplLFxuICAgICAgdGltZXN0YW1wXG4gICAgfSkpLFxuICAgIHZpZXdQZXJmb3JtYW5jZTogY3JlYXRlVmlld1BlcmZvcm1hbmNlKGV2ZW50cylcbiAgfTtcbn07XG4iXSwibmFtZXMiOlsiQ3JlYXRlQXBwTW9uaXRvckNvbW1hbmQiLCJHZXRBcHBNb25pdG9yQ29tbWFuZCIsIkdldEFwcE1vbml0b3JEYXRhQ29tbWFuZCIsIlJVTUNsaWVudCIsImNyZWF0ZUhhc2giLCJyYW5kb21VVUlEIiwiQ29uZmlnIiwiQ09MTEVDVElPTlMiLCJFcnJvclR5cGVzIiwiVXNlckVycm9yIiwidXNlRGIiLCJpc0FkbWluVXNlciIsImFkZEl0ZW0iLCJnZXRJdGVtQnkiLCJnZXRMaXN0QnkiLCJ1cGRhdGVJdGVtIiwiTUFYX0FQUF9JRF9MRU5HVEgiLCJNQVhfRE9NQUlOX0xFTkdUSCIsIk1BWF9NT05JVE9SX05BTUVfTEVOR1RIIiwiTUFYX1JVTV9QQUdFUyIsIk1BWF9SVU1fUkVTVUxUUyIsIlZBTElEX1JBTkdFX0RBWVMiLCJTZXQiLCJjb2xsZWN0aW9uSW5pdGlhbGl6YXRpb24iLCJNYXAiLCJub3JtYWxpemVUZXh0IiwidmFsdWUiLCJtYXhMZW5ndGgiLCJTdHJpbmciLCJ0cmltIiwic2xpY2UiLCJub3JtYWxpemVEb21haW4iLCJyZXBsYWNlIiwic3BsaXQiLCJ0b0xvd2VyQ2FzZSIsIm5vcm1hbGl6ZU1vbml0b3JOYW1lIiwiYXBwSWQiLCJnZXREb2N1bWVudEtleSIsInVwZGF0ZSIsImRpZ2VzdCIsInJlcXVpcmVBZG1pbiIsImNvbnRleHQiLCJzZXNzaW9uIiwiSU5WQUxJRF9TRVNTSU9OIiwicmVxdWlyZVNlc3Npb24iLCJ1c2VySWQiLCJpbml0aWFsaXplQW5hbHl0aWNzQ29sbGVjdGlvbiIsImRhdGFiYXNlTmFtZSIsImNhY2hlS2V5IiwiZXhpc3RpbmdJbml0aWFsaXphdGlvbiIsImdldCIsImluaXRpYWxpemF0aW9uIiwiZGF0YWJhc2UiLCJjb2xsZWN0aW9uIiwiQU5BTFlUSUNTIiwiZXhpc3RzIiwiY3JlYXRlQ29sbGVjdGlvbiIsImVycm9yIiwiZW5zdXJlSW5kZXgiLCJmaWVsZHMiLCJ0eXBlIiwidW5pcXVlIiwic2V0IiwiZGVsZXRlIiwiZ2V0UnVtQ2xpZW50IiwiYXdzQ29uZmlnIiwiY29uZmlnIiwiYXdzIiwiYWNjZXNzS2V5SWQiLCJzZWNyZXRBY2Nlc3NLZXkiLCJzZXNzaW9uVG9rZW4iLCJjcmVkZW50aWFscyIsInVzZXNSdW50aW1lQ3JlZGVudGlhbHMiLCJCb29sZWFuIiwicHJvY2VzcyIsImVudiIsIkFXU19TRVNTSU9OX1RPS0VOIiwiQVdTX0FDQ0VTU19LRVlfSUQiLCJBV1NfU0VDUkVUX0FDQ0VTU19LRVkiLCJ1bmRlZmluZWQiLCJyZWdpb24iLCJmaW5kQXdzTW9uaXRvciIsImNsaWVudCIsIm1vbml0b3JOYW1lIiwicmVzcG9uc2UiLCJzZW5kIiwiTmFtZSIsIm1vbml0b3JJZCIsIkFwcE1vbml0b3IiLCJJZCIsImRvbWFpbiIsIkRvbWFpbiIsImlkIiwibmFtZSIsImZpbmRPckNyZWF0ZUF3c01vbml0b3IiLCJleGlzdGluZ01vbml0b3IiLCJDdXN0b21FdmVudHMiLCJTdGF0dXMiLCJDd0xvZ0VuYWJsZWQiLCJQbGF0Zm9ybSIsIlRhZ3MiLCJtYW5hZ2VkQnkiLCJwYXJzZU1vbml0b3JJbnB1dCIsImlucHV0IiwiYXBwTmFtZSIsIklOVkFMSURfQVJHVU1FTlRTIiwiZ2V0QW5hbHl0aWNzQnlBcHBJZCIsImFwcElkSW5wdXQiLCJnZXRBbmFseXRpY3NDb25maWd1cmF0aW9uIiwiYW5hbHl0aWNzIiwiYW5hbHl0aWNzSWQiLCJnZXRBbmFseXRpY3NCeUlkIiwiYW5hbHl0aWNzSWRJbnB1dCIsImNyZWF0ZUFuYWx5dGljc01vbml0b3IiLCJleGlzdGluZyIsInVzZXJJZHMiLCJpbmNsdWRlcyIsIm1vbml0b3IiLCJfa2V5IiwicmVnZW5lcmF0ZUFuYWx5dGljc0lkIiwiaGFzQWNjZXNzIiwicGFyc2VKc29uUmVjb3JkIiwiQXJyYXkiLCJpc0FycmF5IiwicGFyc2VkIiwiSlNPTiIsInBhcnNlIiwiZ2V0UHJvcGVydHkiLCJwcm9wZXJ0aWVzIiwibWV0YWRhdGEiLCJhbGlhc2VzIiwibm9ybWFsaXplZEFsaWFzZXMiLCJtYXAiLCJhbGlhcyIsImVudHJpZXMiLCJPYmplY3QiLCJmaW5kIiwia2V5IiwiaGFzIiwibm9ybWFsaXplUnVtRXZlbnQiLCJyYXdFdmVudCIsInNvdXJjZSIsImRldGFpbHMiLCJldmVudF9kZXRhaWxzIiwidGltZXN0YW1wIiwiTnVtYmVyIiwiZXZlbnRfdGltZXN0YW1wIiwiaXNGaW5pdGUiLCJnZXRUZXh0IiwiZmFsbGJhY2siLCJkdXJhdGlvblZhbHVlIiwicGF0aCIsImV2ZW50X3R5cGUiLCJhcHBsaWNhdGlvbklkIiwiYnJvd3Nlckxhbmd1YWdlIiwiYnJvd3Nlck5hbWUiLCJicm93c2VyVmVyc2lvbiIsImRldmljZVR5cGUiLCJkdXJhdGlvbiIsImV2ZW50SWQiLCJldmVudF9pZCIsImludGVyYWN0aW9uIiwib3NOYW1lIiwib3NWZXJzaW9uIiwib3V0Y29tZSIsInBhZ2VJZCIsInBhcmVudFBhZ2UiLCJzZXNzaW9uSWQiLCJ1c2VyX2RldGFpbHMiLCJ2aWV3SWQiLCJjcmVhdGVCcmVha2Rvd24iLCJ2YWx1ZXMiLCJ0b3RhbCIsImNvdW50cyIsInJlZHVjZSIsInJlc3VsdCIsImxhYmVsIiwiZnJvbSIsImNvdW50IiwicGVyY2VudGFnZSIsIk1hdGgiLCJyb3VuZCIsInNvcnQiLCJsZWZ0IiwicmlnaHQiLCJsb2NhbGVDb21wYXJlIiwicGVyY2VudGlsZSIsInBlcmNlbnRpbGVWYWx1ZSIsImxlbmd0aCIsInNvcnRlZCIsInRvU29ydGVkIiwiaW5kZXgiLCJtYXgiLCJjZWlsIiwiY3JlYXRlVmlld1BlcmZvcm1hbmNlIiwiZXZlbnRzIiwidmlld3MiLCJldmVudCIsInNhbXBsZXMiLCJwdXNoIiwiZHVyYXRpb25zIiwiZmlsdGVyIiwiZmFpbHVyZVJhdGUiLCJwNTAiLCJwNzUiLCJwOTUiLCJzYW1wbGVDb3VudCIsInRpbWVvdXRSYXRlIiwiZ2V0QXV0aG9yaXplZEFuYWx5dGljcyIsImdldEFuYWx5dGljc0FwcE5hbWUiLCJhcHAiLCJBUFBTIiwiY29uZGl0aW9ucyIsImZpZWxkIiwib3BlcmF0b3IiLCJsb2dpYyIsImRpc3BsYXlOYW1lIiwiZ2V0QXZhaWxhYmxlQW5hbHl0aWNzIiwiZGlyZWN0aW9uIiwiYXZhaWxhYmxlIiwiaXRlbSIsImVucmljaGVkIiwiUHJvbWlzZSIsImFsbCIsInNldEFuYWx5dGljc0FjY2VzcyIsInVzZXJJZHNJbnB1dCIsImdldEFuYWx5dGljc0Rhc2hib2FyZCIsInJhbmdlRGF5c0lucHV0IiwicmFuZ2VEYXlzIiwiZmxvb3IiLCJlbmRUaW1lIiwiRGF0ZSIsIm5vdyIsInN0YXJ0VGltZSIsInJhd0V2ZW50cyIsIm5leHRUb2tlbiIsInBhZ2UiLCJNYXhSZXN1bHRzIiwiTmV4dFRva2VuIiwiVGltZVJhbmdlIiwiQWZ0ZXIiLCJCZWZvcmUiLCJFdmVudHMiLCJzZXNzaW9ucyIsImludGVyYWN0aW9uRXZlbnRzIiwiZXJyb3JFdmVudHMiLCJ0ZXN0IiwiYnVja2V0U2l6ZSIsImJ1Y2tldHMiLCJlcnJvcnMiLCJpbnRlcmFjdGlvbnMiLCJmb3JFYWNoIiwiYnVja2V0IiwiYWRkIiwiYXZlcmFnZUR1cmF0aW9uIiwiYnJvd3NlcnMiLCJqb2luIiwiZGV2aWNlcyIsImVycm9yQ291bnQiLCJldmVudENvdW50IiwiZ2VuZXJhdGVkQXQiLCJsYW5ndWFnZXMiLCJvcGVyYXRpbmdTeXN0ZW1zIiwicGFnZXMiLCJwYWdlVmlld0NvdW50IiwicGFydGlhbCIsInBlcmZvcm1hbmNlU2FtcGxlcyIsInJlY2VudEV2ZW50cyIsIl9hcHBJZCIsInNlc3Npb25Db3VudCIsInNpemUiLCJ0aW1lbGluZSIsInZpZXdQZXJmb3JtYW5j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
@@ -1,12 +1,12 @@
1
1
  import type { AppType } from '../types/apps.types.js';
2
2
  import type { ApiContext } from '../types/auth.types.js';
3
- export interface AppOptions {
3
+ export type AppOptions = Readonly<{
4
4
  readonly id?: string;
5
5
  readonly key?: string;
6
6
  readonly from?: number;
7
7
  readonly name?: string;
8
8
  readonly to?: number;
9
- }
9
+ }>;
10
10
  export declare const getAppOptional: (fields?: string[]) => any;
11
11
  export declare const parseAppOptions: (options?: AppOptions) => {
12
12
  id?: string;
@@ -218,4 +218,4 @@ export const getApps = async (context, options)=>{
218
218
  });
219
219
  };
220
220
 
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL2FwcHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VFbWFpbCwgcGFyc2VJZCwgcGFyc2VQaG9uZSwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yLCBsb2dFeGNlcHRpb24sIFVzZXJFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtnZXREb2NJZCwgZ2V0TGltaXQsIHNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGV9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHtpc0FkbWluVXNlcn0gZnJvbSAnLi4vdXRpbHMvc2Vzc2lvblV0aWxzLmpzJztcbmltcG9ydCB7YWRkSXRlbSwgZGVsZXRlSXRlbSwgZ2V0SXRlbUJ5LCBnZXRMaXN0QnksIHVwZGF0ZUl0ZW19IGZyb20gJy4vY3J1ZC5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcHBUeXBlfSBmcm9tICcuLi90eXBlcy9hcHBzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtTZXNzaW9ufSBmcm9tICcuLi91dGlscy9zZXNzaW9uVXRpbHMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ2FwcHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcE9wdGlvbnMge1xuICByZWFkb25seSBpZD86IHN0cmluZztcbiAgcmVhZG9ubHkga2V5Pzogc3RyaW5nO1xuICByZWFkb25seSBmcm9tPzogbnVtYmVyO1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSB0bz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEFwcE9wdGlvbmFsID0gKGZpZWxkczogc3RyaW5nW10gPSBbXSkgPT5cbiAgZmllbGRzLnJlZHVjZSgoc2VsZWN0cywgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGlmKGZpZWxkLmluY2x1ZGVzKCdDb3VudCcpKSB7XG4gICAgICByZXR1cm4gc2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSgnYXBwcycsICdhJywgZmllbGQsIHNlbGVjdHMpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3RzO1xuICB9LCB7b2JqZWN0czogW10sIHF1ZXJpZXM6IFtdfSk7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUFwcE9wdGlvbnMgPSAob3B0aW9uczogQXBwT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICB0byA9IDMwXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBsaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcblxuICByZXR1cm4ge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgbGltaXRcbiAgfTtcbn07XG5cbmNvbnN0IGJ1aWxkQXBwR2V0RmlsdGVycyA9ICh7aWQsIGtleSwgbmFtZX06IEFwcE9wdGlvbnMpOiB7bG9naWM6ICdBTkQnOyBjb25kaXRpb25zOiBhbnlbXX0gPT4ge1xuICBjb25zdCBjb25kaXRpb25zOiBhbnlbXSA9IFt7ZmllbGQ6ICdhY3RpdmUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IHRydWV9XTtcblxuICBpZihpZCkge1xuICAgIGNvbmRpdGlvbnMucHVzaCh7ZmllbGQ6ICdfaWQnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IHBhcnNlQXJhbmdvSWQoaWQpfSk7XG4gIH1cblxuICBpZihrZXkpIHtcbiAgICBjb25kaXRpb25zLnB1c2goe2ZpZWxkOiAnX2tleScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogcGFyc2VJZChrZXkpfSk7XG4gIH1cblxuICBpZihuYW1lKSB7XG4gICAgY29uZGl0aW9ucy5wdXNoKHtmaWVsZDogJ25hbWUnLCBvcGVyYXRvcjogJ0NPTlRBSU5TJywgdmFsdWU6IHBhcnNlU3RyaW5nKG5hbWUpfSk7XG4gIH1cblxuICByZXR1cm4ge2xvZ2ljOiAnQU5EJywgY29uZGl0aW9uc307XG59O1xuXG5jb25zdCBnZXRBcHBRdWVyeU9wdGlvbnMgPSAoZmllbGRzOiBzdHJpbmdbXSA9IFtdKSA9PiB7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldEFwcE9wdGlvbmFsKGZpZWxkcyk7XG5cbiAgcmV0dXJuIHtcbiAgICBjdXN0b21PYmplY3RzOiBzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBzZWxlY3RPYmplY3RzIDogdW5kZWZpbmVkLFxuICAgIGN1c3RvbVF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXMubGVuZ3RoID4gMCA/IHNlbGVjdFF1ZXJpZXMgOiB1bmRlZmluZWRcbiAgfTtcbn07XG5cbmNvbnN0IGdldEFwcEtleSA9IChhcHA6IEFwcFR5cGUpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCB7X2tleSwgX2lkLCBpZCwgYXBwSWR9ID0gYXBwO1xuICByZXR1cm4gX2tleSB8fCBpZCB8fCBhcHBJZCB8fCBfaWQ/LnNwbGl0KCcvJylbMV07XG59O1xuXG5jb25zdCBidWlsZEFwcE11dGF0aW9uID0gKGFwcDogQXBwVHlwZSk6IFBhcnRpYWw8QXBwVHlwZT4gPT4ge1xuICBjb25zdCB7ZW1haWwgPSAnJywgbmFtZSA9ICcnLCBwaG9uZSA9ICcnfSA9IGFwcDtcblxuICByZXR1cm4ge1xuICAgIGVtYWlsOiBwYXJzZUVtYWlsKGVtYWlsKSxcbiAgICBuYW1lOiBwYXJzZVN0cmluZyhuYW1lKSxcbiAgICBwaG9uZTogcGFyc2VQaG9uZShwaG9uZSlcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRBcHAgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgYXBwOiBBcHBUeXBlKTogUHJvbWlzZTxBcHBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRBcHAnO1xuICBjb25zdCB7bmFtZSA9ICcnfSA9IGFwcDtcbiAgY29uc3QgaW5zZXJ0RGF0YSA9IGJ1aWxkQXBwTXV0YXRpb24oYXBwKTtcbiAgY29uc3Qge2VtYWlsOiBmb3JtYXRFbWFpbCwgbmFtZTogZm9ybWF0TmFtZX0gPSBpbnNlcnREYXRhO1xuXG4gIGlmKCFmb3JtYXROYW1lKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7bmFtZX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0FSR1VNRU5UU1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBDaGVjayBmb3IgZXhpc3RpbmcgYXBwIHVzaW5nIGdlbmVyaWMgcXVlcnlcbiAgICBjb25zdCBjb25kaXRpb25zOiBhbnlbXSA9IFtcbiAgICAgIHtmaWVsZDogJ25hbWUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZvcm1hdE5hbWV9XG4gICAgXTtcblxuICAgIGlmKGZvcm1hdEVtYWlsKSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goe2ZpZWxkOiAnZW1haWwnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZvcm1hdEVtYWlsfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmdBcHBzID0gYXdhaXQgZ2V0TGlzdEJ5PEFwcFR5cGU+KGNvbnRleHQsICdhcHBzJywge1xuICAgICAgbG9naWM6ICdPUicsXG4gICAgICBjb25kaXRpb25zXG4gICAgfSBhcyBhbnkpO1xuXG4gICAgaWYoZXhpc3RpbmdBcHBzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7bmFtZX0sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkVYSVNUSU5HX0lURU1cbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICBwYXJhbXM6IHtuYW1lfVxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGluc2VydDogQXBwVHlwZSA9IHtcbiAgICBfa2V5OiBjcmVhdGVIYXNoKG5hbWUpLFxuICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAuLi5pbnNlcnREYXRhXG4gIH07XG5cbiAgcmV0dXJuIGF3YWl0IGFkZEl0ZW08QXBwVHlwZT4oY29udGV4dCwgJ2FwcHMnLCBpbnNlcnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFwcCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBhcHA6IEFwcFR5cGUpOiBQcm9taXNlPEFwcFR5cGU+ID0+IHtcbiAgY29uc3QgYXBwSWRQYXJzZWQgPSBnZXRBcHBLZXkoYXBwKTtcblxuICBpZighYXBwSWRQYXJzZWQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uOiAndXBkYXRlQXBwJyxcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7YXBwfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfQVJHVU1FTlRTXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdXBkYXRlSXRlbTxBcHBUeXBlPihjb250ZXh0LCAnYXBwcycsIGFwcElkUGFyc2VkLCBidWlsZEFwcE11dGF0aW9uKGFwcCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUFwcCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBhcHA6IEFwcFR5cGUpOiBQcm9taXNlPEFwcFR5cGU+ID0+IHtcbiAgY29uc3Qge3Nlc3Npb24gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBpc0FkbWluID0gaXNBZG1pblVzZXIoc2Vzc2lvbiBhcyBTZXNzaW9uKTtcblxuICBpZighaXNBZG1pbikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVXNlckVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9TRVNTSU9OKSk7XG4gIH1cblxuICBjb25zdCBhcHBEb2NJZCA9IGdldERvY0lkKCdhcHBzJywgYXBwKTtcbiAgY29uc3QgZGVsZXRlZEFwcCA9IGF3YWl0IGRlbGV0ZUl0ZW08QXBwVHlwZT4oY29udGV4dCwgJ2FwcHMnLCBhcHBEb2NJZCk7XG5cbiAgaWYgKCFkZWxldGVkQXBwKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbjogJ2RlbGV0ZUFwcCcsXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2FwcH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0lEXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZGVsZXRlZEFwcDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWFjdGl2YXRlQXBwID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIGFwcDogQXBwVHlwZSk6IFByb21pc2U8QXBwVHlwZT4gPT4ge1xuICBjb25zdCB7c2Vzc2lvbiA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGlzQWRtaW4gPSBpc0FkbWluVXNlcihzZXNzaW9uIGFzIFNlc3Npb24pO1xuICBjb25zdCBhcHBEb2NJZCA9IGdldERvY0lkKCdhcHBzJywgYXBwKTtcblxuICBpZighaXNBZG1pbikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVXNlckVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9TRVNTSU9OKSk7XG4gIH1cblxuICBjb25zdCB1cGRhdGVkOiBBcHBUeXBlID0ge1xuICAgIGFjdGl2ZTogZmFsc2VcbiAgfTtcblxuICByZXR1cm4gYXdhaXQgdXBkYXRlSXRlbTxBcHBUeXBlPihjb250ZXh0LCAnYXBwcycsIGFwcERvY0lkLCB1cGRhdGVkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcHAgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgb3B0aW9ucz86IEFwcE9wdGlvbnMpOiBQcm9taXNlPEFwcFR5cGU+ID0+IHtcbiAgY29uc3Qge2ZpZWxkcywgc2Vzc2lvbiA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHBhcnNlZE9wdGlvbnMgPSBwYXJzZUFwcE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGlzQWRtaW4gPSBpc0FkbWluVXNlcihzZXNzaW9uIGFzIFNlc3Npb24pO1xuXG4gIGlmKCFpc0FkbWluKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBVc2VyRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX1NFU1NJT04pKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBnZXRJdGVtQnk8QXBwVHlwZT4oY29udGV4dCwgJ2FwcHMnLCBidWlsZEFwcEdldEZpbHRlcnMocGFyc2VkT3B0aW9ucykgYXMgYW55LCBnZXRBcHBRdWVyeU9wdGlvbnMoZmllbGRzKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXBwcyA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBvcHRpb25zPzogQXBwT3B0aW9ucyk6IFByb21pc2U8QXBwVHlwZVtdPiA9PiB7XG4gIGNvbnN0IHtmaWVsZHMsIHNlc3Npb24gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBwYXJzZWRPcHRpb25zID0gcGFyc2VBcHBPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VkT3B0aW9ucztcbiAgY29uc3QgaXNBZG1pbiA9IGlzQWRtaW5Vc2VyKHNlc3Npb24gYXMgU2Vzc2lvbik7XG5cbiAgaWYoIWlzQWRtaW4pIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFVzZXJFcnJvcihFcnJvclR5cGVzLklOVkFMSURfU0VTU0lPTikpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IGdldExpc3RCeTxBcHBUeXBlPihjb250ZXh0LCAnYXBwcycsIGJ1aWxkQXBwR2V0RmlsdGVycyhwYXJzZWRPcHRpb25zKSBhcyBhbnksIHtcbiAgICBzb3J0OiBbe2ZpZWxkOiAnbmFtZScsIGRpcmVjdGlvbjogJ0FTQyd9XSxcbiAgICBsaW1pdDoge2Zyb206IGxpbWl0LnN0YXJ0LCB0bzogbGltaXQuc3RhcnQgKyBsaW1pdC5udW19LFxuICAgIC4uLmdldEFwcFF1ZXJ5T3B0aW9ucyhmaWVsZHMpXG4gIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJjcmVhdGVIYXNoIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlRW1haWwiLCJwYXJzZUlkIiwicGFyc2VQaG9uZSIsInBhcnNlU3RyaW5nIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwibG9nRXhjZXB0aW9uIiwiVXNlckVycm9yIiwiZ2V0RG9jSWQiLCJnZXRMaW1pdCIsInNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUiLCJpc0FkbWluVXNlciIsImFkZEl0ZW0iLCJkZWxldGVJdGVtIiwiZ2V0SXRlbUJ5IiwiZ2V0TGlzdEJ5IiwidXBkYXRlSXRlbSIsImV2ZW50Q2F0ZWdvcnkiLCJnZXRBcHBPcHRpb25hbCIsImZpZWxkcyIsInJlZHVjZSIsInNlbGVjdHMiLCJmaWVsZCIsImluY2x1ZGVzIiwib2JqZWN0cyIsInF1ZXJpZXMiLCJwYXJzZUFwcE9wdGlvbnMiLCJvcHRpb25zIiwiZnJvbSIsInRvIiwibGltaXQiLCJidWlsZEFwcEdldEZpbHRlcnMiLCJpZCIsImtleSIsIm5hbWUiLCJjb25kaXRpb25zIiwib3BlcmF0b3IiLCJ2YWx1ZSIsInB1c2giLCJsb2dpYyIsImdldEFwcFF1ZXJ5T3B0aW9ucyIsInNlbGVjdE9iamVjdHMiLCJzZWxlY3RRdWVyaWVzIiwiY3VzdG9tT2JqZWN0cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImN1c3RvbVF1ZXJpZXMiLCJnZXRBcHBLZXkiLCJhcHAiLCJfa2V5IiwiX2lkIiwiYXBwSWQiLCJzcGxpdCIsImJ1aWxkQXBwTXV0YXRpb24iLCJlbWFpbCIsInBob25lIiwiYWRkQXBwIiwiY29udGV4dCIsImFjdGlvbiIsImluc2VydERhdGEiLCJmb3JtYXRFbWFpbCIsImZvcm1hdE5hbWUiLCJjYXRlZ29yeSIsInBhcmFtcyIsIklOVkFMSURfQVJHVU1FTlRTIiwiZXhpc3RpbmdBcHBzIiwiRVhJU1RJTkdfSVRFTSIsImVycm9yIiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImluc2VydCIsImFjdGl2ZSIsInVwZGF0ZUFwcCIsImFwcElkUGFyc2VkIiwiZGVsZXRlQXBwIiwic2Vzc2lvbiIsImlzQWRtaW4iLCJQcm9taXNlIiwicmVqZWN0IiwiSU5WQUxJRF9TRVNTSU9OIiwiYXBwRG9jSWQiLCJkZWxldGVkQXBwIiwiSU5WQUxJRF9JRCIsImRlYWN0aXZhdGVBcHAiLCJ1cGRhdGVkIiwiZ2V0QXBwIiwicGFyc2VkT3B0aW9ucyIsImdldEFwcHMiLCJzb3J0IiwiZGlyZWN0aW9uIiwic3RhcnQiLCJudW0iXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFVBQVUsRUFBRUMsYUFBYSxFQUFFQyxVQUFVLEVBQUVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxXQUFXLFFBQU8sK0JBQStCO0FBQ3JILFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFDbkQsU0FBUUMsUUFBUSxFQUFFQyxZQUFZLEVBQUVDLFNB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
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9hcHBzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQXJhbmdvSWQsIHBhcnNlRW1haWwsIHBhcnNlSWQsIHBhcnNlUGhvbmUsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvciwgbG9nRXhjZXB0aW9uLCBVc2VyRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7Z2V0RG9jSWQsIGdldExpbWl0LCBzZWxlY3RSZWFjdGlvbkNvdW50QnlUeXBlfSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7aXNBZG1pblVzZXJ9IGZyb20gJy4uL3V0aWxzL3Nlc3Npb25VdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGRlbGV0ZUl0ZW0sIGdldEl0ZW1CeSwgZ2V0TGlzdEJ5LCB1cGRhdGVJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXBwVHlwZX0gZnJvbSAnLi4vdHlwZXMvYXBwcy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7U2Vzc2lvbn0gZnJvbSAnLi4vdXRpbHMvc2Vzc2lvblV0aWxzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdhcHBzJztcblxuZXhwb3J0IHR5cGUgQXBwT3B0aW9ucyA9IFJlYWRvbmx5PHtcbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGtleT86IHN0cmluZztcbiAgcmVhZG9ubHkgZnJvbT86IG51bWJlcjtcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgdG8/OiBudW1iZXI7XG59PjtcblxuZXhwb3J0IGNvbnN0IGdldEFwcE9wdGlvbmFsID0gKGZpZWxkczogc3RyaW5nW10gPSBbXSkgPT5cbiAgZmllbGRzLnJlZHVjZSgoc2VsZWN0cywgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGlmKGZpZWxkLmluY2x1ZGVzKCdDb3VudCcpKSB7XG4gICAgICByZXR1cm4gc2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSgnYXBwcycsICdhJywgZmllbGQsIHNlbGVjdHMpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3RzO1xuICB9LCB7b2JqZWN0czogW10sIHF1ZXJpZXM6IFtdfSk7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUFwcE9wdGlvbnMgPSAob3B0aW9uczogQXBwT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICB0byA9IDMwXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBsaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcblxuICByZXR1cm4ge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgbGltaXRcbiAgfTtcbn07XG5cbmNvbnN0IGJ1aWxkQXBwR2V0RmlsdGVycyA9ICh7aWQsIGtleSwgbmFtZX06IEFwcE9wdGlvbnMpOiB7bG9naWM6ICdBTkQnOyBjb25kaXRpb25zOiBhbnlbXX0gPT4ge1xuICBjb25zdCBjb25kaXRpb25zOiBhbnlbXSA9IFt7ZmllbGQ6ICdhY3RpdmUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IHRydWV9XTtcblxuICBpZihpZCkge1xuICAgIGNvbmRpdGlvbnMucHVzaCh7ZmllbGQ6ICdfaWQnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IHBhcnNlQXJhbmdvSWQoaWQpfSk7XG4gIH1cblxuICBpZihrZXkpIHtcbiAgICBjb25kaXRpb25zLnB1c2goe2ZpZWxkOiAnX2tleScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogcGFyc2VJZChrZXkpfSk7XG4gIH1cblxuICBpZihuYW1lKSB7XG4gICAgY29uZGl0aW9ucy5wdXNoKHtmaWVsZDogJ25hbWUnLCBvcGVyYXRvcjogJ0NPTlRBSU5TJywgdmFsdWU6IHBhcnNlU3RyaW5nKG5hbWUpfSk7XG4gIH1cblxuICByZXR1cm4ge2xvZ2ljOiAnQU5EJywgY29uZGl0aW9uc307XG59O1xuXG5jb25zdCBnZXRBcHBRdWVyeU9wdGlvbnMgPSAoZmllbGRzOiBzdHJpbmdbXSA9IFtdKSA9PiB7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldEFwcE9wdGlvbmFsKGZpZWxkcyk7XG5cbiAgcmV0dXJuIHtcbiAgICBjdXN0b21PYmplY3RzOiBzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBzZWxlY3RPYmplY3RzIDogdW5kZWZpbmVkLFxuICAgIGN1c3RvbVF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXMubGVuZ3RoID4gMCA/IHNlbGVjdFF1ZXJpZXMgOiB1bmRlZmluZWRcbiAgfTtcbn07XG5cbmNvbnN0IGdldEFwcEtleSA9IChhcHA6IEFwcFR5cGUpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCB7X2tleSwgX2lkLCBpZCwgYXBwSWR9ID0gYXBwO1xuICByZXR1cm4gX2tleSB8fCBpZCB8fCBhcHBJZCB8fCBfaWQ/LnNwbGl0KCcvJylbMV07XG59O1xuXG5jb25zdCBidWlsZEFwcE11dGF0aW9uID0gKGFwcDogQXBwVHlwZSk6IFBhcnRpYWw8QXBwVHlwZT4gPT4ge1xuICBjb25zdCB7ZW1haWwgPSAnJywgbmFtZSA9ICcnLCBwaG9uZSA9ICcnfSA9IGFwcDtcblxuICByZXR1cm4ge1xuICAgIGVtYWlsOiBwYXJzZUVtYWlsKGVtYWlsKSxcbiAgICBuYW1lOiBwYXJzZVN0cmluZyhuYW1lKSxcbiAgICBwaG9uZTogcGFyc2VQaG9uZShwaG9uZSlcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRBcHAgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgYXBwOiBBcHBUeXBlKTogUHJvbWlzZTxBcHBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRBcHAnO1xuICBjb25zdCB7bmFtZSA9ICcnfSA9IGFwcDtcbiAgY29uc3QgaW5zZXJ0RGF0YSA9IGJ1aWxkQXBwTXV0YXRpb24oYXBwKTtcbiAgY29uc3Qge2VtYWlsOiBmb3JtYXRFbWFpbCwgbmFtZTogZm9ybWF0TmFtZX0gPSBpbnNlcnREYXRhO1xuXG4gIGlmKCFmb3JtYXROYW1lKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7bmFtZX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0FSR1VNRU5UU1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBDaGVjayBmb3IgZXhpc3RpbmcgYXBwIHVzaW5nIGdlbmVyaWMgcXVlcnlcbiAgICBjb25zdCBjb25kaXRpb25zOiBhbnlbXSA9IFtcbiAgICAgIHtmaWVsZDogJ25hbWUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZvcm1hdE5hbWV9XG4gICAgXTtcblxuICAgIGlmKGZvcm1hdEVtYWlsKSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goe2ZpZWxkOiAnZW1haWwnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZvcm1hdEVtYWlsfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmdBcHBzID0gYXdhaXQgZ2V0TGlzdEJ5PEFwcFR5cGU+KGNvbnRleHQsICdhcHBzJywge1xuICAgICAgbG9naWM6ICdPUicsXG4gICAgICBjb25kaXRpb25zXG4gICAgfSBhcyBhbnkpO1xuXG4gICAgaWYoZXhpc3RpbmdBcHBzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7bmFtZX0sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkVYSVNUSU5HX0lURU1cbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICBwYXJhbXM6IHtuYW1lfVxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGluc2VydDogQXBwVHlwZSA9IHtcbiAgICBfa2V5OiBjcmVhdGVIYXNoKG5hbWUpLFxuICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAuLi5pbnNlcnREYXRhXG4gIH07XG5cbiAgcmV0dXJuIGF3YWl0IGFkZEl0ZW08QXBwVHlwZT4oY29udGV4dCwgJ2FwcHMnLCBpbnNlcnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFwcCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBhcHA6IEFwcFR5cGUpOiBQcm9taXNlPEFwcFR5cGU+ID0+IHtcbiAgY29uc3QgYXBwSWRQYXJzZWQgPSBnZXRBcHBLZXkoYXBwKTtcblxuICBpZighYXBwSWRQYXJzZWQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uOiAndXBkYXRlQXBwJyxcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7YXBwfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfQVJHVU1FTlRTXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdXBkYXRlSXRlbTxBcHBUeXBlPihjb250ZXh0LCAnYXBwcycsIGFwcElkUGFyc2VkLCBidWlsZEFwcE11dGF0aW9uKGFwcCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUFwcCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBhcHA6IEFwcFR5cGUpOiBQcm9taXNlPEFwcFR5cGU+ID0+IHtcbiAgY29uc3Qge3Nlc3Npb24gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBpc0FkbWluID0gaXNBZG1pblVzZXIoc2Vzc2lvbiBhcyBTZXNzaW9uKTtcblxuICBpZighaXNBZG1pbikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVXNlckVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9TRVNTSU9OKSk7XG4gIH1cblxuICBjb25zdCBhcHBEb2NJZCA9IGdldERvY0lkKCdhcHBzJywgYXBwKTtcbiAgY29uc3QgZGVsZXRlZEFwcCA9IGF3YWl0IGRlbGV0ZUl0ZW08QXBwVHlwZT4oY29udGV4dCwgJ2FwcHMnLCBhcHBEb2NJZCk7XG5cbiAgaWYgKCFkZWxldGVkQXBwKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbjogJ2RlbGV0ZUFwcCcsXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2FwcH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0lEXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZGVsZXRlZEFwcDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWFjdGl2YXRlQXBwID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIGFwcDogQXBwVHlwZSk6IFByb21pc2U8QXBwVHlwZT4gPT4ge1xuICBjb25zdCB7c2Vzc2lvbiA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGlzQWRtaW4gPSBpc0FkbWluVXNlcihzZXNzaW9uIGFzIFNlc3Npb24pO1xuICBjb25zdCBhcHBEb2NJZCA9IGdldERvY0lkKCdhcHBzJywgYXBwKTtcblxuICBpZighaXNBZG1pbikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVXNlckVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9TRVNTSU9OKSk7XG4gIH1cblxuICBjb25zdCB1cGRhdGVkOiBBcHBUeXBlID0ge1xuICAgIGFjdGl2ZTogZmFsc2VcbiAgfTtcblxuICByZXR1cm4gYXdhaXQgdXBkYXRlSXRlbTxBcHBUeXBlPihjb250ZXh0LCAnYXBwcycsIGFwcERvY0lkLCB1cGRhdGVkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcHAgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgb3B0aW9ucz86IEFwcE9wdGlvbnMpOiBQcm9taXNlPEFwcFR5cGU+ID0+IHtcbiAgY29uc3Qge2ZpZWxkcywgc2Vzc2lvbiA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHBhcnNlZE9wdGlvbnMgPSBwYXJzZUFwcE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGlzQWRtaW4gPSBpc0FkbWluVXNlcihzZXNzaW9uIGFzIFNlc3Npb24pO1xuXG4gIGlmKCFpc0FkbWluKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBVc2VyRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX1NFU1NJT04pKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBnZXRJdGVtQnk8QXBwVHlwZT4oY29udGV4dCwgJ2FwcHMnLCBidWlsZEFwcEdldEZpbHRlcnMocGFyc2VkT3B0aW9ucykgYXMgYW55LCBnZXRBcHBRdWVyeU9wdGlvbnMoZmllbGRzKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXBwcyA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBvcHRpb25zPzogQXBwT3B0aW9ucyk6IFByb21pc2U8QXBwVHlwZVtdPiA9PiB7XG4gIGNvbnN0IHtmaWVsZHMsIHNlc3Npb24gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBwYXJzZWRPcHRpb25zID0gcGFyc2VBcHBPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VkT3B0aW9ucztcbiAgY29uc3QgaXNBZG1pbiA9IGlzQWRtaW5Vc2VyKHNlc3Npb24gYXMgU2Vzc2lvbik7XG5cbiAgaWYoIWlzQWRtaW4pIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFVzZXJFcnJvcihFcnJvclR5cGVzLklOVkFMSURfU0VTU0lPTikpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IGdldExpc3RCeTxBcHBUeXBlPihjb250ZXh0LCAnYXBwcycsIGJ1aWxkQXBwR2V0RmlsdGVycyhwYXJzZWRPcHRpb25zKSBhcyBhbnksIHtcbiAgICBzb3J0OiBbe2ZpZWxkOiAnbmFtZScsIGRpcmVjdGlvbjogJ0FTQyd9XSxcbiAgICBsaW1pdDoge2Zyb206IGxpbWl0LnN0YXJ0LCB0bzogbGltaXQuc3RhcnQgKyBsaW1pdC5udW19LFxuICAgIC4uLmdldEFwcFF1ZXJ5T3B0aW9ucyhmaWVsZHMpXG4gIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJjcmVhdGVIYXNoIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlRW1haWwiLCJwYXJzZUlkIiwicGFyc2VQaG9uZSIsInBhcnNlU3RyaW5nIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwibG9nRXhjZXB0aW9uIiwiVXNlckVycm9yIiwiZ2V0RG9jSWQiLCJnZXRMaW1pdCIsInNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUiLCJpc0FkbWluVXNlciIsImFkZEl0ZW0iLCJkZWxldGVJdGVtIiwiZ2V0SXRlbUJ5IiwiZ2V0TGlzdEJ5IiwidXBkYXRlSXRlbSIsImV2ZW50Q2F0ZWdvcnkiLCJnZXRBcHBPcHRpb25hbCIsImZpZWxkcyIsInJlZHVjZSIsInNlbGVjdHMiLCJmaWVsZCIsImluY2x1ZGVzIiwib2JqZWN0cyIsInF1ZXJpZXMiLCJwYXJzZUFwcE9wdGlvbnMiLCJvcHRpb25zIiwiZnJvbSIsInRvIiwibGltaXQiLCJidWlsZEFwcEdldEZpbHRlcnMiLCJpZCIsImtleSIsIm5hbWUiLCJjb25kaXRpb25zIiwib3BlcmF0b3IiLCJ2YWx1ZSIsInB1c2giLCJsb2dpYyIsImdldEFwcFF1ZXJ5T3B0aW9ucyIsInNlbGVjdE9iamVjdHMiLCJzZWxlY3RRdWVyaWVzIiwiY3VzdG9tT2JqZWN0cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImN1c3RvbVF1ZXJpZXMiLCJnZXRBcHBLZXkiLCJhcHAiLCJfa2V5IiwiX2lkIiwiYXBwSWQiLCJzcGxpdCIsImJ1aWxkQXBwTXV0YXRpb24iLCJlbWFpbCIsInBob25lIiwiYWRkQXBwIiwiY29udGV4dCIsImFjdGlvbiIsImluc2VydERhdGEiLCJmb3JtYXRFbWFpbCIsImZvcm1hdE5hbWUiLCJjYXRlZ29yeSIsInBhcmFtcyIsIklOVkFMSURfQVJHVU1FTlRTIiwiZXhpc3RpbmdBcHBzIiwiRVhJU1RJTkdfSVRFTSIsImVycm9yIiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImluc2VydCIsImFjdGl2ZSIsInVwZGF0ZUFwcCIsImFwcElkUGFyc2VkIiwiZGVsZXRlQXBwIiwic2Vzc2lvbiIsImlzQWRtaW4iLCJQcm9taXNlIiwicmVqZWN0IiwiSU5WQUxJRF9TRVNTSU9OIiwiYXBwRG9jSWQiLCJkZWxldGVkQXBwIiwiSU5WQUxJRF9JRCIsImRlYWN0aXZhdGVBcHAiLCJ1cGRhdGVkIiwiZ2V0QXBwIiwicGFyc2VkT3B0aW9ucyIsImdldEFwcHMiLCJzb3J0IiwiZGlyZWN0aW9uIiwic3RhcnQiLCJudW0iXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFVBQVUsRUFBRUMsYUFBYSxFQUFFQyxVQUFVLEVBQUVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxXQUFXLFFBQU8sK0JBQStCO0FBQ3JILFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFDbkQsU0FBUUMsUUFBUSxFQUFFQyxZQUFZ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
@@ -125,4 +125,4 @@ export const deleteConnection = (context, fromType, fromId, toType, toId, connec
125
125
  });
126
126
  };
127
127
 
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL2Nvbm5lY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHtwYXJzZUFyYW5nb0lkLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7YnVpbGRGaWx0ZXJDbGF1c2V9IGZyb20gJy4uL3V0aWxzL2FxbEhlbHBlcnMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5cbmltcG9ydCB0eXBlIHtGaWx0ZXJHcm91cH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHtDb25uZWN0aW9uS2luZHN9IGZyb20gJy4uL3R5cGVzL2Nvbm5lY3Rpb25zLnR5cGVzLmpzJztcblxuaW1wb3J0IHR5cGUge0Nvbm5lY3Rpb25LaW5kVHlwZSwgQ29ubmVjdGlvblR5cGV9IGZyb20gJy4uL3R5cGVzL2Nvbm5lY3Rpb25zLnR5cGVzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdjb25uZWN0aW9ucyc7XG5jb25zdCBoYXNDb25uZWN0aW9uQ29sbGVjdGlvbiA9IGxpdGVyYWwoJ2hhc0Nvbm5lY3Rpb24nKTtcblxuY29uc3QgcmVtb3ZlRm9sbG93Q29ubmVjdGlvbnNGb3JCbG9ja2VkUGFpciA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZnJvbURvY0lkOiBzdHJpbmcsXG4gIHRvRG9jSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxgXG4gICAgRk9SIGhjIElOICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICBGSUxURVIgaGMudHlwZSA9PSAke0Nvbm5lY3Rpb25LaW5kcy5GT0xMT1d9XG4gICAgICBGSUxURVIgKFxuICAgICAgICAoaGMuX2Zyb20gPT0gJHtmcm9tRG9jSWR9ICYmIGhjLl90byA9PSAke3RvRG9jSWR9KVxuICAgICAgICB8fCAoaGMuX2Zyb20gPT0gJHt0b0RvY0lkfSAmJiBoYy5fdG8gPT0gJHtmcm9tRG9jSWR9KVxuICAgICAgKVxuICAgICAgUkVNT1ZFIGhjIElOICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gIGApO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZENvbm5lY3Rpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGZyb21UeXBlOiBzdHJpbmcsXG4gIGZyb21JZDogc3RyaW5nLFxuICB0b1R5cGU6IHN0cmluZyxcbiAgdG9JZDogc3RyaW5nLFxuICB2YWx1ZT86IHN0cmluZyxcbiAgY29ubmVjdGlvblR5cGU6IENvbm5lY3Rpb25LaW5kVHlwZSA9IENvbm5lY3Rpb25LaW5kcy5GT0xMT1dcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkQ29ubmVjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcblxuICBjb25zdCBmb3JtYXRGcm9tRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGAke2Zyb21UeXBlfS8ke2Zyb21JZH1gKTtcbiAgY29uc3QgZm9ybWF0VG9Eb2NJZCA9IHBhcnNlQXJhbmdvSWQoYCR7dG9UeXBlfS8ke3RvSWR9YCk7XG4gIGNvbnN0IGluc2VydCA9IHtcbiAgICBfZnJvbTogZm9ybWF0RnJvbURvY0lkLFxuICAgIF90bzogZm9ybWF0VG9Eb2NJZCxcbiAgICBpc0RpcmVjdDogdHJ1ZSxcbiAgICB0eXBlOiBjb25uZWN0aW9uVHlwZSxcbiAgICB2YWx1ZTogISF2YWx1ZSA/IHBhcnNlU3RyaW5nKHZhbHVlLCAzMikgOiB1bmRlZmluZWRcbiAgfTtcbiAgY29uc3QgYXFsUXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gaGFzQ29ubmVjdGlvbmA7XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgaWYoY29ubmVjdGlvblR5cGUgPT09IENvbm5lY3Rpb25LaW5kcy5CTE9DSykge1xuICAgICAgICBhd2FpdCByZW1vdmVGb2xsb3dDb25uZWN0aW9uc0ZvckJsb2NrZWRQYWlyKGNvbnRleHQsIGZvcm1hdEZyb21Eb2NJZCwgZm9ybWF0VG9Eb2NJZCk7XG4gICAgICB9XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSkpXG4gICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbm5lY3Rpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGZyb21UeXBlOiBzdHJpbmcsXG4gIGZyb21JZDogc3RyaW5nLFxuICB0b1R5cGU6IHN0cmluZyxcbiAgdG9JZDogc3RyaW5nLFxuICBjb25uZWN0aW9uVHlwZTogQ29ubmVjdGlvbktpbmRUeXBlID0gQ29ubmVjdGlvbktpbmRzLkZPTExPV1xuKTogUHJvbWlzZTxDb25uZWN0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0Q29ubmVjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcblxuICBjb25zdCBmb3JtYXRGcm9tRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGAke2Zyb21UeXBlfS8ke2Zyb21JZH1gKTtcbiAgY29uc3QgZm9ybWF0VG9Eb2NJZCA9IHBhcnNlQXJhbmdvSWQoYCR7dG9UeXBlfS8ke3RvSWR9YCk7XG5cbiAgY29uc3QgZmlsdGVyczogRmlsdGVyR3JvdXAgPSB7XG4gICAgbG9naWM6ICdBTkQnLFxuICAgIGNvbmRpdGlvbnM6IFtcbiAgICAgIHtmaWVsZDogJ19mcm9tJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmb3JtYXRGcm9tRG9jSWR9LFxuICAgICAge2ZpZWxkOiAnX3RvJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmb3JtYXRUb0RvY0lkfSxcbiAgICAgIHtmaWVsZDogJ3R5cGUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGNvbm5lY3Rpb25UeXBlfVxuICAgIF1cbiAgfTtcbiAgY29uc3QgZmlsdGVyQ2xhdXNlID0gYnVpbGRGaWx0ZXJDbGF1c2UoZmlsdGVycywgJ2hjJyk7XG4gIGNvbnN0IGFxbFFyeSA9IGFxbGBcbiAgICBGT1IgaGMgSU4gJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQ2xhdXNlKX1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBoY1xuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVDb25uZWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBmcm9tVHlwZTogc3RyaW5nLFxuICBmcm9tSWQ6IHN0cmluZyxcbiAgdG9UeXBlOiBzdHJpbmcsXG4gIHRvSWQ6IHN0cmluZyxcbiAgY29ubmVjdGlvblR5cGU6IENvbm5lY3Rpb25LaW5kVHlwZSA9IENvbm5lY3Rpb25LaW5kcy5GT0xMT1dcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlQ29ubmVjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0RnJvbURvY0lkID0gcGFyc2VBcmFuZ29JZChgJHtmcm9tVHlwZX0vJHtmcm9tSWR9YCk7XG4gIGNvbnN0IGZvcm1hdFRvRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGAke3RvVHlwZX0vJHt0b0lkfWApO1xuXG4gIGNvbnN0IGZpbHRlcnM6IEZpbHRlckdyb3VwID0ge1xuICAgIGxvZ2ljOiAnQU5EJyxcbiAgICBjb25kaXRpb25zOiBbXG4gICAgICB7ZmllbGQ6ICdfZnJvbScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogZm9ybWF0RnJvbURvY0lkfSxcbiAgICAgIHtmaWVsZDogJ190bycsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogZm9ybWF0VG9Eb2NJZH0sXG4gICAgICB7ZmllbGQ6ICd0eXBlJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBjb25uZWN0aW9uVHlwZX1cbiAgICBdXG4gIH07XG4gIGNvbnN0IGZpbHRlckNsYXVzZSA9IGJ1aWxkRmlsdGVyQ2xhdXNlKGZpbHRlcnMsICdoYycpO1xuICBjb25zdCBhcWxRcnkgPSBhcWxgXG4gICAgRk9SIGhjIElOICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckNsYXVzZSl9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRU1PVkUgaGMgSU4gJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJwYXJzZUFyYW5nb0lkIiwicGFyc2VTdHJpbmciLCJhcWwiLCJsaXRlcmFsIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwiYnVpbGRGaWx0ZXJDbGF1c2UiLCJ1c2VEYiIsIkNvbm5lY3Rpb25LaW5kcyIsImV2ZW50Q2F0ZWdvcnkiLCJoYXNDb25uZWN0aW9uQ29sbGVjdGlvbiIsInJlbW92ZUZvbGxvd0Nvbm5lY3Rpb25zRm9yQmxvY2tlZFBhaXIiLCJjb250ZXh0IiwiZnJvbURvY0lkIiwidG9Eb2NJZCIsImRhdGFiYXNlTmFtZSIsInF1ZXJ5IiwiRk9MTE9XIiwiYWRkQ29ubmVjdGlvbiIsImZyb21UeXBlIiwiZnJvbUlkIiwidG9UeXBlIiwidG9JZCIsInZhbHVlIiwiY29ubmVjdGlvblR5cGUiLCJhY3Rpb24iLCJmb3JtYXRGcm9tRG9jSWQiLCJmb3JtYXRUb0RvY0lkIiwiaW5zZXJ0IiwiX2Zyb20iLCJfdG8iLCJpc0RpcmVjdCIsInR5cGUiLCJ1bmRlZmluZWQiLCJhcWxRcnkiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJCTE9DSyIsImNhdGNoIiwiZXJyb3IiLCJjYXRlZ29yeSIsImxhYmVsIiwiREFUQUJBU0VfRVJST1IiLCJnZXRDb25uZWN0aW9uIiwiZmlsdGVycyIsImxvZ2ljIiwiY29uZGl0aW9ucyIsImZpZWxkIiwib3BlcmF0b3IiLCJmaWx0ZXJDbGF1c2UiLCJjdXJzb3IiLCJuZXh0IiwiZGVsZXRlQ29ubmVjdGlvbiJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBUUEsYUFBYSxFQUFFQyxXQUFXLFFBQU8sK0JBQStCO0FBQ3hFLFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQVFDLE9BQU8sUUFBTyxlQUFlO0FBRXJDLFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFDbkQsU0FBUUMsUUFBUSxRQUFPLDZCQUE2QjtBQUNwRCxTQUFRQyxpQkFBaUIsUUFBTyx5QkFBeUI7QUFDekQsU0FBUUMsS0FBSyxRQUFPLDRCQUE0QjtBQUloRCxTQUFRQyxlQUFlLFFBQU8sZ0NBQWdDO0FBSTlELE1BQU1DLGdCQUFnQjtBQUN0QixNQUFNQywwQkFBMEJQLFFBQVE7QUFFeEMsTUFBTVEsd0NBQXdDLE9BQzVDQyxTQUNBQyxXQUNBQztJQUVBLE1BQU1QLE1BQU1LLFFBQVFHLFlBQVksRUFBRUMsS0FBSyxDQUFDZCxHQUFHLENBQUM7Y0FDaEMsRUFBRVEsd0JBQXdCO3dCQUNoQixFQUFFRixnQkFBZ0JTLE1BQU0sQ0FBQzs7cUJBRTVCLEVBQUVKLFVBQVUsY0FBYyxFQUFFQyxRQUFRO3dCQUNqQyxFQUFFQSxRQUFRLGNBQWMsRUFBRUQsVUFBVTs7bUJBRXpDLEVBQUVILHdCQUF3QjtFQUMzQyxDQUFDO0FBQ0g7QUFFQSxPQUFPLE1BQU1RLGdCQUFnQixDQUMzQk4sU0FDQU8sVUFDQUMsUUFDQUMsUUFDQUMsTUFDQUMsT0FDQUMsaUJBQXFDaEIsZ0JBQWdCUyxNQUFNO0lBRTNELE1BQU1RLFNBQVM7SUFDZixNQUFNLEVBQUNWLFlBQVksRUFBQyxHQUFHSDtJQUV2QixNQUFNYyxrQkFBa0IxQixjQUFjLEdBQUdtQixTQUFTLENBQUMsRUFBRUMsUUFBUTtJQUM3RCxNQUFNTyxn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
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9jb25uZWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7cGFyc2VBcmFuZ29JZCwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7bGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge2J1aWxkRmlsdGVyQ2xhdXNlfSBmcm9tICcuLi91dGlscy9hcWxIZWxwZXJzLmpzJztcbmltcG9ydCB7dXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuXG5pbXBvcnQgdHlwZSB7RmlsdGVyR3JvdXB9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB7Q29ubmVjdGlvbktpbmRzfSBmcm9tICcuLi90eXBlcy9jb25uZWN0aW9ucy50eXBlcy5qcyc7XG5cbmltcG9ydCB0eXBlIHtDb25uZWN0aW9uS2luZFR5cGUsIENvbm5lY3Rpb25UeXBlfSBmcm9tICcuLi90eXBlcy9jb25uZWN0aW9ucy50eXBlcy5qcyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAnY29ubmVjdGlvbnMnO1xuY29uc3QgaGFzQ29ubmVjdGlvbkNvbGxlY3Rpb24gPSBsaXRlcmFsKCdoYXNDb25uZWN0aW9uJyk7XG5cbmNvbnN0IHJlbW92ZUZvbGxvd0Nvbm5lY3Rpb25zRm9yQmxvY2tlZFBhaXIgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGZyb21Eb2NJZDogc3RyaW5nLFxuICB0b0RvY0lkOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsYFxuICAgIEZPUiBoYyBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgRklMVEVSIGhjLnR5cGUgPT0gJHtDb25uZWN0aW9uS2luZHMuRk9MTE9XfVxuICAgICAgRklMVEVSIChcbiAgICAgICAgKGhjLl9mcm9tID09ICR7ZnJvbURvY0lkfSAmJiBoYy5fdG8gPT0gJHt0b0RvY0lkfSlcbiAgICAgICAgfHwgKGhjLl9mcm9tID09ICR7dG9Eb2NJZH0gJiYgaGMuX3RvID09ICR7ZnJvbURvY0lkfSlcbiAgICAgIClcbiAgICAgIFJFTU9WRSBoYyBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICBgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRDb25uZWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBmcm9tVHlwZTogc3RyaW5nLFxuICBmcm9tSWQ6IHN0cmluZyxcbiAgdG9UeXBlOiBzdHJpbmcsXG4gIHRvSWQ6IHN0cmluZyxcbiAgdmFsdWU/OiBzdHJpbmcsXG4gIGNvbm5lY3Rpb25UeXBlOiBDb25uZWN0aW9uS2luZFR5cGUgPSBDb25uZWN0aW9uS2luZHMuRk9MTE9XXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZENvbm5lY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgY29uc3QgZm9ybWF0RnJvbURvY0lkID0gcGFyc2VBcmFuZ29JZChgJHtmcm9tVHlwZX0vJHtmcm9tSWR9YCk7XG4gIGNvbnN0IGZvcm1hdFRvRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGAke3RvVHlwZX0vJHt0b0lkfWApO1xuICBjb25zdCBpbnNlcnQgPSB7XG4gICAgX2Zyb206IGZvcm1hdEZyb21Eb2NJZCxcbiAgICBfdG86IGZvcm1hdFRvRG9jSWQsXG4gICAgaXNEaXJlY3Q6IHRydWUsXG4gICAgdHlwZTogY29ubmVjdGlvblR5cGUsXG4gICAgdmFsdWU6ICEhdmFsdWUgPyBwYXJzZVN0cmluZyh2YWx1ZSwgMzIpIDogdW5kZWZpbmVkXG4gIH07XG4gIGNvbnN0IGFxbFFyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIGhhc0Nvbm5lY3Rpb25gO1xuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIC50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgIGlmKGNvbm5lY3Rpb25UeXBlID09PSBDb25uZWN0aW9uS2luZHMuQkxPQ0spIHtcbiAgICAgICAgYXdhaXQgcmVtb3ZlRm9sbG93Q29ubmVjdGlvbnNGb3JCbG9ja2VkUGFpcihjb250ZXh0LCBmb3JtYXRGcm9tRG9jSWQsIGZvcm1hdFRvRG9jSWQpO1xuICAgICAgfVxuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpKVxuICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb25uZWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBmcm9tVHlwZTogc3RyaW5nLFxuICBmcm9tSWQ6IHN0cmluZyxcbiAgdG9UeXBlOiBzdHJpbmcsXG4gIHRvSWQ6IHN0cmluZyxcbiAgY29ubmVjdGlvblR5cGU6IENvbm5lY3Rpb25LaW5kVHlwZSA9IENvbm5lY3Rpb25LaW5kcy5GT0xMT1dcbik6IFByb21pc2U8Q29ubmVjdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldENvbm5lY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgY29uc3QgZm9ybWF0RnJvbURvY0lkID0gcGFyc2VBcmFuZ29JZChgJHtmcm9tVHlwZX0vJHtmcm9tSWR9YCk7XG4gIGNvbnN0IGZvcm1hdFRvRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGAke3RvVHlwZX0vJHt0b0lkfWApO1xuXG4gIGNvbnN0IGZpbHRlcnM6IEZpbHRlckdyb3VwID0ge1xuICAgIGxvZ2ljOiAnQU5EJyxcbiAgICBjb25kaXRpb25zOiBbXG4gICAgICB7ZmllbGQ6ICdfZnJvbScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogZm9ybWF0RnJvbURvY0lkfSxcbiAgICAgIHtmaWVsZDogJ190bycsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogZm9ybWF0VG9Eb2NJZH0sXG4gICAgICB7ZmllbGQ6ICd0eXBlJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBjb25uZWN0aW9uVHlwZX1cbiAgICBdXG4gIH07XG4gIGNvbnN0IGZpbHRlckNsYXVzZSA9IGJ1aWxkRmlsdGVyQ2xhdXNlKGZpbHRlcnMsICdoYycpO1xuICBjb25zdCBhcWxRcnkgPSBhcWxgXG4gICAgRk9SIGhjIElOICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckNsYXVzZSl9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gaGNcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlQ29ubmVjdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZnJvbVR5cGU6IHN0cmluZyxcbiAgZnJvbUlkOiBzdHJpbmcsXG4gIHRvVHlwZTogc3RyaW5nLFxuICB0b0lkOiBzdHJpbmcsXG4gIGNvbm5lY3Rpb25UeXBlOiBDb25uZWN0aW9uS2luZFR5cGUgPSBDb25uZWN0aW9uS2luZHMuRk9MTE9XXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZUNvbm5lY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEZyb21Eb2NJZCA9IHBhcnNlQXJhbmdvSWQoYCR7ZnJvbVR5cGV9LyR7ZnJvbUlkfWApO1xuICBjb25zdCBmb3JtYXRUb0RvY0lkID0gcGFyc2VBcmFuZ29JZChgJHt0b1R5cGV9LyR7dG9JZH1gKTtcblxuICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJHcm91cCA9IHtcbiAgICBsb2dpYzogJ0FORCcsXG4gICAgY29uZGl0aW9uczogW1xuICAgICAge2ZpZWxkOiAnX2Zyb20nLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZvcm1hdEZyb21Eb2NJZH0sXG4gICAgICB7ZmllbGQ6ICdfdG8nLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZvcm1hdFRvRG9jSWR9LFxuICAgICAge2ZpZWxkOiAndHlwZScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogY29ubmVjdGlvblR5cGV9XG4gICAgXVxuICB9O1xuICBjb25zdCBmaWx0ZXJDbGF1c2UgPSBidWlsZEZpbHRlckNsYXVzZShmaWx0ZXJzLCAnaGMnKTtcbiAgY29uc3QgYXFsUXJ5ID0gYXFsYFxuICAgIEZPUiBoYyBJTiAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgRklMVEVSICR7bGl0ZXJhbChmaWx0ZXJDbGF1c2UpfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVNT1ZFIGhjIElOICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbn07XG4iXSwibmFtZXMiOlsicGFyc2VBcmFuZ29JZCIsInBhcnNlU3RyaW5nIiwiYXFsIiwibGl0ZXJhbCIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImJ1aWxkRmlsdGVyQ2xhdXNlIiwidXNlRGIiLCJDb25uZWN0aW9uS2luZHMiLCJldmVudENhdGVnb3J5IiwiaGFzQ29ubmVjdGlvbkNvbGxlY3Rpb24iLCJyZW1vdmVGb2xsb3dDb25uZWN0aW9uc0ZvckJsb2NrZWRQYWlyIiwiY29udGV4dCIsImZyb21Eb2NJZCIsInRvRG9jSWQiLCJkYXRhYmFzZU5hbWUiLCJxdWVyeSIsIkZPTExPVyIsImFkZENvbm5lY3Rpb24iLCJmcm9tVHlwZSIsImZyb21JZCIsInRvVHlwZSIsInRvSWQiLCJ2YWx1ZSIsImNvbm5lY3Rpb25UeXBlIiwiYWN0aW9uIiwiZm9ybWF0RnJvbURvY0lkIiwiZm9ybWF0VG9Eb2NJZCIsImluc2VydCIsIl9mcm9tIiwiX3RvIiwiaXNEaXJlY3QiLCJ0eXBlIiwidW5kZWZpbmVkIiwiYXFsUXJ5IiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiQkxPQ0siLCJjYXRjaCIsImVycm9yIiwiY2F0ZWdvcnkiLCJsYWJlbCIsIkRBVEFCQVNFX0VSUk9SIiwiZ2V0Q29ubmVjdGlvbiIsImZpbHRlcnMiLCJsb2dpYyIsImNvbmRpdGlvbnMiLCJmaWVsZCIsIm9wZXJhdG9yIiwiZmlsdGVyQ2xhdXNlIiwiY3Vyc29yIiwibmV4dCIsImRlbGV0ZUNvbm5lY3Rpb24iXSwibWFwcGluZ3MiOiJBQUNBLFNBQVFBLGFBQWEsRUFBRUMsV0FBVyxRQUFPLCtCQUErQjtBQUN4RSxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFRQyxPQUFPLFFBQU8sZUFBZTtBQUVyQyxTQUFRQyxVQUFVLFFBQU8sMEJBQTBCO0FBQ25ELFNBQVFDLFFBQVEsUUFBTyw2QkFBNkI7QUFDcEQsU0FBUUMsaUJBQWlCLFFBQU8seUJBQXlCO0FBQ3pELFNBQVFDLEtBQUssUUFBTyw0QkFBNEI7QUFJaEQsU0FBUUMsZUFBZSxRQUFPLGdDQUFnQztBQUk5RCxNQUFNQyxnQkFBZ0I7QUFDdEIsTUFBTUMsMEJBQTBCUCxRQUFRO0FBRXhDLE1BQU1RLHdDQUF3QyxPQUM1Q0MsU0FDQUMsV0FDQUM7SUFFQSxNQUFNUCxNQUFNSyxRQUFRRyxZQUFZLEVBQUVDLEtBQUssQ0FBQ2QsR0FBRyxDQUFDO2NBQ2hDLEVBQUVRLHdCQUF3Qjt3QkFDaEIsRUFBRUYsZ0JBQWdCUyxNQUFNLENBQUM7O3FCQUU1QixFQUFFSixVQUFVLGNBQWMsRUFBRUMsUUFBUTt3QkFDakMsRUFBRUEsUUFBUSxjQUFjLEVBQUVELFVBQVU7O21CQUV6QyxFQUFFSCx3QkFBd0I7RUFDM0MsQ0FBQztBQUNIO0FBRUEsT0FBTyxNQUFNUSxnQkFBZ0IsQ0FDM0JOLFNBQ0FPLFVBQ0FDLFFBQ0FDLFFBQ0FDLE1BQ0FDLE9BQ0FDLGlCQUFxQ2hCLGdCQUFnQlMsTUFBTTtJQUUzRCxNQUFNUSxTQUFTO0lBQ2YsTUFBTSxFQUFDVixZQUFZLEVBQUMsR0FBR0g7SUFFdkIsTUFBTWMsa0JBQWtCMUIsY0FBYyxHQUFHbUIsU0FBUyxDQUFDLEVBQUVDLFFBQVE7SUFDN0QsTUFBTU8s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