@openhi/constructs 0.0.0

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 (90) hide show
  1. package/README.md +3 -0
  2. package/lib/app/index.d.ts +4 -0
  3. package/lib/app/index.js +21 -0
  4. package/lib/app/open-hi-app.d.ts +85 -0
  5. package/lib/app/open-hi-app.js +127 -0
  6. package/lib/app/open-hi-environment.d.ts +59 -0
  7. package/lib/app/open-hi-environment.js +72 -0
  8. package/lib/app/open-hi-service.d.ts +169 -0
  9. package/lib/app/open-hi-service.js +195 -0
  10. package/lib/app/open-hi-stage.d.ts +71 -0
  11. package/lib/app/open-hi-stage.js +70 -0
  12. package/lib/components/acm/root-wildcard-certificate.d.ts +15 -0
  13. package/lib/components/acm/root-wildcard-certificate.js +35 -0
  14. package/lib/components/api-gateway/core-http-api.d.ts +10 -0
  15. package/lib/components/api-gateway/core-http-api.js +44 -0
  16. package/lib/components/api-gateway/http-lambda-integration-no-permissions.d.ts +18 -0
  17. package/lib/components/api-gateway/http-lambda-integration-no-permissions.js +26 -0
  18. package/lib/components/app-sync/core-graphql-api.d.ts +12 -0
  19. package/lib/components/app-sync/core-graphql-api.js +54 -0
  20. package/lib/components/auth.d.ts +75 -0
  21. package/lib/components/auth.js +100 -0
  22. package/lib/components/cognito/core-user-pool-client.d.ts +10 -0
  23. package/lib/components/cognito/core-user-pool-client.js +47 -0
  24. package/lib/components/cognito/core-user-pool-domain.d.ts +10 -0
  25. package/lib/components/cognito/core-user-pool-domain.js +41 -0
  26. package/lib/components/cognito/core-user-pool-kms-key.d.ts +10 -0
  27. package/lib/components/cognito/core-user-pool-kms-key.js +37 -0
  28. package/lib/components/cognito/core-user-pool.d.ts +10 -0
  29. package/lib/components/cognito/core-user-pool.js +54 -0
  30. package/lib/components/core.d.ts +102 -0
  31. package/lib/components/core.js +79 -0
  32. package/lib/components/dynamodb/dynamo-db-data-store.d.ts +33 -0
  33. package/lib/components/dynamodb/dynamo-db-data-store.js +107 -0
  34. package/lib/components/event-bridge/data-event-bus.d.ts +19 -0
  35. package/lib/components/event-bridge/data-event-bus.js +34 -0
  36. package/lib/components/event-bridge/ops-event-bus.d.ts +19 -0
  37. package/lib/components/event-bridge/ops-event-bus.js +34 -0
  38. package/lib/components/global.d.ts +36 -0
  39. package/lib/components/global.js +63 -0
  40. package/lib/components/index.d.ts +1 -0
  41. package/lib/components/index.js +18 -0
  42. package/lib/components/route-53/child-hosted-zone.d.ts +20 -0
  43. package/lib/components/route-53/child-hosted-zone.js +48 -0
  44. package/lib/components/route-53/root-hosted-zone.d.ts +10 -0
  45. package/lib/components/route-53/root-hosted-zone.js +20 -0
  46. package/lib/components/ssm/discoverable-string-parameter.d.ts +59 -0
  47. package/lib/components/ssm/discoverable-string-parameter.js +50 -0
  48. package/lib/components/ssm/index.d.ts +1 -0
  49. package/lib/components/ssm/index.js +18 -0
  50. package/lib/data/dynamo/ehr/r4/Patient.d.ts +180 -0
  51. package/lib/data/dynamo/ehr/r4/Patient.js +192 -0
  52. package/lib/data/dynamo/ehr/r4/ehr-r4-data-service.d.ts +162 -0
  53. package/lib/data/dynamo/ehr/r4/ehr-r4-data-service.js +37 -0
  54. package/lib/data/hello-world.d.ts +39 -0
  55. package/lib/data/hello-world.js +59 -0
  56. package/lib/data/import-patient-with-dynalite.d.ts +1 -0
  57. package/lib/data/import-patient-with-dynalite.js +87 -0
  58. package/lib/data/import-patient.d.ts +47 -0
  59. package/lib/data/import-patient.js +158 -0
  60. package/lib/data/lambda/rest-api-lambda.d.ts +13 -0
  61. package/lib/data/lambda/rest-api-lambda.handler.d.ts +1 -0
  62. package/lib/data/lambda/rest-api-lambda.handler.js +10 -0
  63. package/lib/data/lambda/rest-api-lambda.js +22 -0
  64. package/lib/data/middleware/open-hi-context.d.ts +13 -0
  65. package/lib/data/middleware/open-hi-context.js +31 -0
  66. package/lib/data/rest-api/ehr/r4/Patient.d.ts +16 -0
  67. package/lib/data/rest-api/ehr/r4/Patient.js +234 -0
  68. package/lib/data/rest-api/rest-api-local.d.ts +1 -0
  69. package/lib/data/rest-api/rest-api-local.js +8 -0
  70. package/lib/data/rest-api/rest-api-mockdata.d.ts +7 -0
  71. package/lib/data/rest-api/rest-api-mockdata.js +585 -0
  72. package/lib/data/rest-api/rest-api.d.ts +3 -0
  73. package/lib/data/rest-api/rest-api.js +26 -0
  74. package/lib/index.d.ts +3 -0
  75. package/lib/index.js +20 -0
  76. package/lib/lib/compression.d.ts +27 -0
  77. package/lib/lib/compression.js +87 -0
  78. package/lib/services/index.d.ts +5 -0
  79. package/lib/services/index.js +22 -0
  80. package/lib/services/open-hi-auth-service.d.ts +31 -0
  81. package/lib/services/open-hi-auth-service.js +31 -0
  82. package/lib/services/open-hi-core-service.d.ts +15 -0
  83. package/lib/services/open-hi-core-service.js +38 -0
  84. package/lib/services/open-hi-data-service.d.ts +18 -0
  85. package/lib/services/open-hi-data-service.js +18 -0
  86. package/lib/services/open-hi-global-service.d.ts +15 -0
  87. package/lib/services/open-hi-global-service.js +44 -0
  88. package/lib/services/open-hi-rest-api-service.d.ts +17 -0
  89. package/lib/services/open-hi-rest-api-service.js +107 -0
  90. package/package.json +67 -0
@@ -0,0 +1,585 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.organizationsMock = exports.careTeamParticipantsMock = exports.patientsMock = void 0;
4
+ const patientsMock = {
5
+ "019bb003-7de1-7290-bf54-84ba6b4936f1": {
6
+ resourceType: "Patient",
7
+ identifier: [
8
+ {
9
+ use: "official",
10
+ value: "019bb003-7de1-7290-bf54-84ba6b4936f1",
11
+ type: [
12
+ {
13
+ coding: [
14
+ {
15
+ system: "openhi",
16
+ version: "v0.0.1",
17
+ display: "system",
18
+ userSelected: false,
19
+ },
20
+ ],
21
+ text: "OpenHI Internal Identifier",
22
+ },
23
+ ],
24
+ },
25
+ ],
26
+ active: true,
27
+ name: [
28
+ {
29
+ use: "usual",
30
+ text: "Dr. Karl Stephen McDanielson IV",
31
+ family: "McDanielson",
32
+ given: "Karl",
33
+ prefix: "Dr.",
34
+ suffix: "IV",
35
+ },
36
+ ],
37
+ telecom: [
38
+ {
39
+ system: "phone",
40
+ value: "18885550100",
41
+ use: "mobile",
42
+ rank: 2,
43
+ },
44
+ {
45
+ system: "sms",
46
+ value: "18885550100",
47
+ use: "mobile",
48
+ rank: 1,
49
+ },
50
+ ],
51
+ gender: "male",
52
+ birthDate: "19560908",
53
+ deceasedBoolean: true,
54
+ deceasedDateTime: null,
55
+ address: [
56
+ {
57
+ use: "home",
58
+ type: "both",
59
+ text: "432 Cedar St., St. Paul, MN 92033",
60
+ line: "432 Cedar St.",
61
+ city: "St. Paul",
62
+ district: "Warren County",
63
+ state: "MN",
64
+ postalCode: "92033",
65
+ country: "US",
66
+ },
67
+ ],
68
+ maritalStatus: {
69
+ coding: [
70
+ {
71
+ system: "openhi",
72
+ version: "v0.0.1",
73
+ display: "any",
74
+ userSelected: false,
75
+ },
76
+ ],
77
+ text: "Married",
78
+ },
79
+ multipleBirthBoolean: true,
80
+ multipleBirthInteger: 1,
81
+ contact: null,
82
+ animal: null,
83
+ communication: [
84
+ {
85
+ language: {
86
+ text: "en-US",
87
+ },
88
+ preferred: false,
89
+ },
90
+ {
91
+ language: {
92
+ text: "eo-AQ",
93
+ },
94
+ preferred: true,
95
+ },
96
+ ],
97
+ generalPractitioner: [
98
+ {
99
+ reference: "/careteam_participants/019bb00e-04ab-7614-aab4-1b86b3a9f12d",
100
+ identifier: "019bb00e-04ab-7614-aab4-1b86b3a9f12d",
101
+ display: "Dr. Moreau",
102
+ },
103
+ {
104
+ reference: "/careteam_participants/019bb016-7aad-70af-a553-e05123271886",
105
+ identifier: "019bb016-7aad-70af-a553-e05123271886",
106
+ display: "Dr. West",
107
+ },
108
+ ],
109
+ managingOrganization: {
110
+ reference: "/organizations/019bb02c-25c9-7a81-8d2c-cf6b7f233b08",
111
+ identifier: "019bb02c-25c9-7a81-8d2c-cf6b7f233b08",
112
+ display: "Real Good Medical Care Inc.",
113
+ },
114
+ link: null,
115
+ },
116
+ "019bb003-7de1-7559-99ca-a922e1009338": {
117
+ resourceType: "Patient",
118
+ identifier: [
119
+ {
120
+ use: "official",
121
+ value: "019bb003-7de1-7559-99ca-a922e1009338",
122
+ type: [
123
+ {
124
+ coding: [
125
+ {
126
+ system: "openhi",
127
+ version: "v0.0.1",
128
+ display: "system",
129
+ userSelected: false,
130
+ },
131
+ ],
132
+ text: "OpenHI Internal Identifier",
133
+ },
134
+ ],
135
+ },
136
+ ],
137
+ active: true,
138
+ name: [
139
+ {
140
+ use: "official",
141
+ text: "Dr. Linda Elise Farquar",
142
+ family: "Farquar",
143
+ given: "Linda",
144
+ prefix: "Dr.",
145
+ suffix: null,
146
+ },
147
+ ],
148
+ telecom: [
149
+ {
150
+ system: "sms",
151
+ value: "18885550101",
152
+ use: "mobile",
153
+ rank: 3,
154
+ },
155
+ {
156
+ system: "phone",
157
+ value: "18885550101",
158
+ use: "mobile",
159
+ rank: 1,
160
+ },
161
+ {
162
+ system: "email",
163
+ value: "linda@farquarfamily.net",
164
+ use: "home",
165
+ rank: 2,
166
+ },
167
+ ],
168
+ gender: "female",
169
+ birthDate: "19840721",
170
+ deceasedBoolean: false,
171
+ deceasedDateTime: null,
172
+ address: [
173
+ {
174
+ use: "home",
175
+ type: "both",
176
+ text: "1776 America Esplanade, Sacremento, CA 98077",
177
+ line: "1776 America Esplanade",
178
+ city: "Sacremento",
179
+ district: "Sacremento County",
180
+ state: "CA",
181
+ postalCode: "98077",
182
+ country: "US",
183
+ },
184
+ ],
185
+ maritalStatus: {
186
+ coding: [
187
+ {
188
+ system: "openhi",
189
+ version: "v0.0.1",
190
+ display: "any",
191
+ userSelected: false,
192
+ },
193
+ ],
194
+ text: "Single",
195
+ },
196
+ multipleBirthBoolean: false,
197
+ multipleBirthInteger: null,
198
+ contact: [],
199
+ communication: [
200
+ {
201
+ language: {
202
+ text: "es-MX",
203
+ },
204
+ preferred: true,
205
+ },
206
+ {
207
+ language: {
208
+ text: "eo-AQ",
209
+ },
210
+ preferred: false,
211
+ },
212
+ ],
213
+ generalPractitioner: [
214
+ {
215
+ reference: "/careteam_participants/019bb00e-04ab-7614-aab4-1b86b3a9f12d",
216
+ identifier: "019bb00e-04ab-7614-aab4-1b86b3a9f12d",
217
+ display: "Dr. Moreau",
218
+ },
219
+ {
220
+ reference: "/careteam_participants/019bb016-7aad-70af-a553-e05123271886",
221
+ identifier: "019bb016-7aad-70af-a553-e05123271886",
222
+ display: "Dr. West",
223
+ },
224
+ ],
225
+ managingOrganization: {
226
+ reference: "/organizations/019bb02c-25c9-7a81-8d2c-cf6b7f233b08",
227
+ identifier: "019bb02c-25c9-7a81-8d2c-cf6b7f233b08",
228
+ display: "Real Good Medical Care Inc.",
229
+ },
230
+ link: null,
231
+ },
232
+ "019bb003-7de1-78c9-9305-01eaf2dd852b": {
233
+ resourceType: "Patient",
234
+ identifier: [
235
+ {
236
+ use: "official",
237
+ value: "019bb003-7de1-78c9-9305-01eaf2dd852b",
238
+ type: [
239
+ {
240
+ coding: [
241
+ {
242
+ system: "openhi",
243
+ version: "v0.0.1",
244
+ display: "system",
245
+ userSelected: false,
246
+ },
247
+ ],
248
+ text: "OpenHI Internal Identifier",
249
+ },
250
+ ],
251
+ },
252
+ ],
253
+ active: true,
254
+ name: [
255
+ {
256
+ use: "usual",
257
+ text: "Jasimine Davida Ellison",
258
+ family: "Ellison",
259
+ given: "Jasimine",
260
+ prefix: "Ms.",
261
+ suffix: null,
262
+ },
263
+ ],
264
+ telecom: [
265
+ {
266
+ system: "phone",
267
+ value: "18885550102",
268
+ use: "home",
269
+ rank: 2,
270
+ },
271
+ {
272
+ system: "fax",
273
+ value: "18885550103",
274
+ use: "home",
275
+ rank: 1,
276
+ },
277
+ ],
278
+ gender: "female",
279
+ birthDate: "19760101",
280
+ deceasedBoolean: false,
281
+ deceasedDateTime: null,
282
+ address: [
283
+ {
284
+ use: "home",
285
+ type: "both",
286
+ text: "1088 Hastings Blvd., New Orleans, LA, 78912",
287
+ line: "1088 Hastings Blvd.",
288
+ city: "New Orleans",
289
+ district: "Orleans Parish",
290
+ state: "LA",
291
+ postalCode: "78912",
292
+ country: "US",
293
+ },
294
+ ],
295
+ maritalStatus: {
296
+ coding: [
297
+ {
298
+ system: "openhi",
299
+ version: "v0.0.1",
300
+ display: "any",
301
+ userSelected: false,
302
+ },
303
+ ],
304
+ text: "Single",
305
+ },
306
+ multipleBirthBoolean: true,
307
+ multipleBirthInteger: 3,
308
+ contact: null,
309
+ communication: [
310
+ {
311
+ language: {
312
+ text: "en-US",
313
+ },
314
+ preferred: false,
315
+ },
316
+ {
317
+ language: {
318
+ text: "fr-AQ",
319
+ },
320
+ preferred: true,
321
+ },
322
+ ],
323
+ generalPractitioner: [
324
+ {
325
+ reference: "/careteam_participants/019bb00e-04ab-7614-aab4-1b86b3a9f12d",
326
+ identifier: "019bb00e-04ab-7614-aab4-1b86b3a9f12d",
327
+ display: "Dr. Moreau",
328
+ },
329
+ {
330
+ reference: "/careteam_participants/019bb016-7aad-70af-a553-e05123271886",
331
+ identifier: "019bb016-7aad-70af-a553-e05123271886",
332
+ display: "Dr. West",
333
+ },
334
+ ],
335
+ managingOrganization: {
336
+ reference: "/organizations/019bb02c-25c9-7a81-8d2c-cf6b7f233b08",
337
+ identifier: "019bb02c-25c9-7a81-8d2c-cf6b7f233b08",
338
+ display: "Real Good Medical Care Inc.",
339
+ },
340
+ link: null,
341
+ },
342
+ "019bb003-7de1-7fa1-9532-3de54627923b": {
343
+ identifier: [
344
+ {
345
+ use: "official",
346
+ value: "019bb003-7de1-7fa1-9532-3de54627923b",
347
+ type: [
348
+ {
349
+ coding: [
350
+ {
351
+ system: "openhi",
352
+ version: "v0.0.1",
353
+ display: "system",
354
+ userSelected: false,
355
+ },
356
+ ],
357
+ text: "OpenHI Internal Identifier",
358
+ },
359
+ ],
360
+ },
361
+ ],
362
+ active: true,
363
+ name: [
364
+ {
365
+ use: "usual",
366
+ text: "Dr. Mario Luigi Mushroom",
367
+ family: "Mushroom",
368
+ given: "Mario",
369
+ prefix: "Dr.",
370
+ suffix: null,
371
+ },
372
+ ],
373
+ telecom: [
374
+ {
375
+ system: "email",
376
+ value: "mario@mushroomkingdom.org",
377
+ use: "home",
378
+ rank: 1,
379
+ },
380
+ {
381
+ system: "sms",
382
+ value: "18885550104",
383
+ use: "mobile",
384
+ rank: 2,
385
+ },
386
+ {
387
+ system: "phone",
388
+ value: "18885550103",
389
+ use: "mobile",
390
+ rank: 3,
391
+ },
392
+ ],
393
+ gender: "male",
394
+ birthDate: "19810709",
395
+ deceasedBoolean: false,
396
+ deceasedDateTime: null,
397
+ address: [
398
+ {
399
+ use: "home",
400
+ type: "both",
401
+ text: "657 Green Shell Lane, NYC, NY 11236",
402
+ line: "657 Green Shell Lane",
403
+ city: "New York City",
404
+ district: "Kings County",
405
+ state: "NY",
406
+ postalCode: "11236",
407
+ country: "US",
408
+ },
409
+ ],
410
+ maritalStatus: {
411
+ coding: [
412
+ {
413
+ system: "openhi",
414
+ version: "v0.0.1",
415
+ display: "any",
416
+ userSelected: false,
417
+ },
418
+ ],
419
+ text: "Single",
420
+ },
421
+ multipleBirthBoolean: false,
422
+ multipleBirthInteger: 1,
423
+ contact: [],
424
+ communication: [
425
+ {
426
+ language: {
427
+ text: "en-US",
428
+ },
429
+ preferred: false,
430
+ },
431
+ {
432
+ language: {
433
+ text: "eo-AQ",
434
+ },
435
+ preferred: true,
436
+ },
437
+ ],
438
+ generalPractitioner: [
439
+ {
440
+ reference: "/careteam_participants/019bb00e-04ab-7614-aab4-1b86b3a9f12d",
441
+ identifier: "019bb00e-04ab-7614-aab4-1b86b3a9f12d",
442
+ display: "Dr. Moreau",
443
+ },
444
+ {
445
+ reference: "/careteam_participants/019bb016-7aad-70af-a553-e05123271886",
446
+ identifier: "019bb016-7aad-70af-a553-e05123271886",
447
+ display: "Dr. West",
448
+ },
449
+ ],
450
+ managingOrganization: {
451
+ reference: "/organizations/019bb02c-25c9-7a81-8d2c-cf6b7f233b08",
452
+ identifier: "019bb02c-25c9-7a81-8d2c-cf6b7f233b08",
453
+ display: "Real Good Medical Care Inc.",
454
+ },
455
+ link: null,
456
+ },
457
+ };
458
+ exports.patientsMock = patientsMock;
459
+ const careTeamParticipantsMock = {
460
+ "019bb00e-04ab-7614-aab4-1b86b3a9f12d": {
461
+ role: {
462
+ coding: [
463
+ {
464
+ system: "openhi",
465
+ version: "v0.0.1",
466
+ display: "any",
467
+ userSelected: false,
468
+ },
469
+ ],
470
+ text: "Primary care physician",
471
+ },
472
+ member: {
473
+ reference: "/persons/019bb058-2824-7c26-9cfd-09257cb98c75",
474
+ identifier: "019bb058-2824-7c26-9cfd-09257cb98c75",
475
+ display: "Dr. Moreau",
476
+ },
477
+ onBehalfOf: {
478
+ reference: "/organizations/019bb02c-25c9-7a81-8d2c-cf6b7f233b08",
479
+ identifier: "019bb02c-25c9-7a81-8d2c-cf6b7f233b08",
480
+ display: "Real Good Medical Care Inc.",
481
+ },
482
+ },
483
+ "019bb016-7aad-70af-a553-e05123271886": {
484
+ role: {
485
+ coding: [
486
+ {
487
+ system: "openhi",
488
+ version: "v0.0.1",
489
+ display: "any",
490
+ userSelected: false,
491
+ },
492
+ ],
493
+ text: "Primary care physician",
494
+ },
495
+ member: {
496
+ reference: "/persons/019bb059-2d95-7c96-b15d-75fbb6ddfd25",
497
+ identifier: "019bb059-2d95-7c96-b15d-75fbb6ddfd25",
498
+ display: "Dr. West",
499
+ },
500
+ onBehalfOf: {
501
+ reference: "/organizations/019bb02c-25c9-7a81-8d2c-cf6b7f233b08",
502
+ identifier: "019bb02c-25c9-7a81-8d2c-cf6b7f233b08",
503
+ display: "Real Good Medical Care Inc.",
504
+ },
505
+ },
506
+ };
507
+ exports.careTeamParticipantsMock = careTeamParticipantsMock;
508
+ const organizationsMock = {
509
+ "019bb02c-25c9-7a81-8d2c-cf6b7f233b08": {
510
+ resourceType: "Organization",
511
+ identifier: [
512
+ {
513
+ use: "official",
514
+ value: "019bb02c-25c9-7a81-8d2c-cf6b7f233b08",
515
+ type: [
516
+ {
517
+ coding: [
518
+ {
519
+ system: "openhi",
520
+ version: "v0.0.1",
521
+ display: "system",
522
+ userSelected: false,
523
+ },
524
+ ],
525
+ text: "OpenHI Internal Identifier",
526
+ },
527
+ ],
528
+ },
529
+ ],
530
+ active: true,
531
+ type: [
532
+ {
533
+ coding: [
534
+ {
535
+ system: "openhi",
536
+ version: "v0.0.1",
537
+ display: "all",
538
+ userSelected: false,
539
+ },
540
+ ],
541
+ text: "Primary Care Facility",
542
+ },
543
+ ],
544
+ name: "Real Good Medical Care Inc.",
545
+ alias: ["Real Good Healthcare", "Real Good Doctors", "Health Wizards"],
546
+ telecom: [
547
+ {
548
+ system: "email",
549
+ value: "contact@realgoodmedicalcare.co.uk",
550
+ use: "work",
551
+ rank: 3,
552
+ },
553
+ {
554
+ system: "fax",
555
+ value: "18885550107",
556
+ use: "work",
557
+ rank: 2,
558
+ },
559
+ {
560
+ system: "phone",
561
+ value: "18885550106",
562
+ use: "work",
563
+ rank: 1,
564
+ },
565
+ ],
566
+ address: [
567
+ {
568
+ use: "work",
569
+ type: "both",
570
+ text: "1202 Napoleon Ave., Kalamazoo, MI 76543",
571
+ line: "1202 Napoleon Ave.",
572
+ city: "Kalamazoo",
573
+ district: "Kalamazoo County",
574
+ state: "MI",
575
+ postalCode: "76543",
576
+ country: "US",
577
+ },
578
+ ],
579
+ partOf: null,
580
+ contact: [],
581
+ endpoint: null,
582
+ },
583
+ };
584
+ exports.organizationsMock = organizationsMock;
585
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC1hcGktbW9ja2RhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YS9yZXN0LWFwaS9yZXN0LWFwaS1tb2NrZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSxNQUFNLFlBQVksR0FBZTtJQUMvQixzQ0FBc0MsRUFBRTtRQUN0QyxZQUFZLEVBQUUsU0FBUztRQUN2QixVQUFVLEVBQUU7WUFDVjtnQkFDRSxHQUFHLEVBQUUsVUFBVTtnQkFDZixLQUFLLEVBQUUsc0NBQXNDO2dCQUM3QyxJQUFJLEVBQUU7b0JBQ0o7d0JBQ0UsTUFBTSxFQUFFOzRCQUNOO2dDQUNFLE1BQU0sRUFBRSxRQUFRO2dDQUNoQixPQUFPLEVBQUUsUUFBUTtnQ0FDakIsT0FBTyxFQUFFLFFBQVE7Z0NBQ2pCLFlBQVksRUFBRSxLQUFLOzZCQUNwQjt5QkFDRjt3QkFDRCxJQUFJLEVBQUUsNEJBQTRCO3FCQUNuQztpQkFDRjthQUNGO1NBQ0Y7UUFDRCxNQUFNLEVBQUUsSUFBSTtRQUNaLElBQUksRUFBRTtZQUNKO2dCQUNFLEdBQUcsRUFBRSxPQUFPO2dCQUNaLElBQUksRUFBRSxpQ0FBaUM7Z0JBQ3ZDLE1BQU0sRUFBRSxhQUFhO2dCQUNyQixLQUFLLEVBQUUsTUFBTTtnQkFDYixNQUFNLEVBQUUsS0FBSztnQkFDYixNQUFNLEVBQUUsSUFBSTthQUNiO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxNQUFNLEVBQUUsT0FBTztnQkFDZixLQUFLLEVBQUUsYUFBYTtnQkFDcEIsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsSUFBSSxFQUFFLENBQUM7YUFDUjtZQUNEO2dCQUNFLE1BQU0sRUFBRSxLQUFLO2dCQUNiLEtBQUssRUFBRSxhQUFhO2dCQUNwQixHQUFHLEVBQUUsUUFBUTtnQkFDYixJQUFJLEVBQUUsQ0FBQzthQUNSO1NBQ0Y7UUFDRCxNQUFNLEVBQUUsTUFBTTtRQUNkLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLGVB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LElBQUk7Z0JBQ1gsVUFBVSxFQUFFLE9BQU87Z0JBQ25CLE9BQU8sRUFBRSxJQUFJO2FBQ2Q7U0FDRjtRQUNELE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLEVBQUU7UUFDWCxRQUFRLEVBQUUsSUFBSTtLQUNmO0NBQ0YsQ0FBQztBQUUrQyw4Q0FBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbnRlcmZhY2UgRGljdGlvbmFyeSB7XG4gIFtrZXk6IHN0cmluZ106IG9iamVjdDtcbn1cbmNvbnN0IHBhdGllbnRzTW9jazogRGljdGlvbmFyeSA9IHtcbiAgXCIwMTliYjAwMy03ZGUxLTcyOTAtYmY1NC04NGJhNmI0OTM2ZjFcIjoge1xuICAgIHJlc291cmNlVHlwZTogXCJQYXRpZW50XCIsXG4gICAgaWRlbnRpZmllcjogW1xuICAgICAge1xuICAgICAgICB1c2U6IFwib2ZmaWNpYWxcIixcbiAgICAgICAgdmFsdWU6IFwiMDE5YmIwMDMtN2RlMS03MjkwLWJmNTQtODRiYTZiNDkzNmYxXCIsXG4gICAgICAgIHR5cGU6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb2Rpbmc6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN5c3RlbTogXCJvcGVuaGlcIixcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBcInYwLjAuMVwiLFxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwic3lzdGVtXCIsXG4gICAgICAgICAgICAgICAgdXNlclNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB0ZXh0OiBcIk9wZW5ISSBJbnRlcm5hbCBJZGVudGlmaWVyXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBhY3RpdmU6IHRydWUsXG4gICAgbmFtZTogW1xuICAgICAge1xuICAgICAgICB1c2U6IFwidXN1YWxcIixcbiAgICAgICAgdGV4dDogXCJEci4gS2FybCBTdGVwaGVuIE1jRGFuaWVsc29uIElWXCIsXG4gICAgICAgIGZhbWlseTogXCJNY0RhbmllbHNvblwiLFxuICAgICAgICBnaXZlbjogXCJLYXJsXCIsXG4gICAgICAgIHByZWZpeDogXCJEci5cIixcbiAgICAgICAgc3VmZml4OiBcIklWXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgdGVsZWNvbTogW1xuICAgICAge1xuICAgICAgICBzeXN0ZW06IFwicGhvbmVcIixcbiAgICAgICAgdmFsdWU6IFwiMTg4ODU1NTAxMDBcIixcbiAgICAgICAgdXNlOiBcIm1vYmlsZVwiLFxuICAgICAgICByYW5rOiAyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc3lzdGVtOiBcInNtc1wiLFxuICAgICAgICB2YWx1ZTogXCIxODg4NTU1MDEwMFwiLFxuICAgICAgICB1c2U6IFwibW9iaWxlXCIsXG4gICAgICAgIHJhbms6IDEsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZ2VuZGVyOiBcIm1hbGVcIixcbiAgICBiaXJ0aERhdGU6IFwiMTk1NjA5MDhcIixcbiAgICBkZWNlYXNlZEJvb2xlYW46IHRydWUsXG4gICAgZGVjZWFzZWREYXRlVGltZTogbnVsbCxcbiAgICBhZGRyZXNzOiBbXG4gICAgICB7XG4gICAgICAgIHVzZTogXCJob21lXCIsXG4gICAgICAgIHR5cGU6IFwiYm90aFwiLFxuICAgICAgICB0ZXh0OiBcIjQzMiBDZWRhciBTdC4sIFN0LiBQYXVsLCBNTiA5MjAzM1wiLFxuICAgICAgICBsaW5lOiBcIjQzMiBDZWRhciBTdC5cIixcbiAgICAgICAgY2l0eTogXCJTdC4gUGF1bFwiLFxuICAgICAgICBkaXN0cmljdDogXCJXYXJyZW4gQ291bnR5XCIsXG4gICAgICAgIHN0YXRlOiBcIk1OXCIsXG4gICAgICAgIHBvc3RhbENvZGU6IFwiOTIwMzNcIixcbiAgICAgICAgY291bnRyeTogXCJVU1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIG1hcml0YWxTdGF0dXM6IHtcbiAgICAgIGNvZGluZzogW1xuICAgICAgICB7XG4gICAgICAgICAgc3lzdGVtOiBcIm9wZW5oaVwiLFxuICAgICAgICAgIHZlcnNpb246IFwidjAuMC4xXCIsXG4gICAgICAgICAgZGlzcGxheTogXCJhbnlcIixcbiAgICAgICAgICB1c2VyU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHRleHQ6IFwiTWFycmllZFwiLFxuICAgIH0sXG4gICAgbXVsdGlwbGVCaXJ0aEJvb2xlYW46IHRydWUsXG4gICAgbXVsdGlwbGVCaXJ0aEludGVnZXI6IDEsXG4gICAgY29udGFjdDogbnVsbCxcbiAgICBhbmltYWw6IG51bGwsXG4gICAgY29tbXVuaWNhdGlvbjogW1xuICAgICAge1xuICAgICAgICBsYW5ndWFnZToge1xuICAgICAgICAgIHRleHQ6IFwiZW4tVVNcIixcbiAgICAgICAgfSxcbiAgICAgICAgcHJlZmVycmVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhbmd1YWdlOiB7XG4gICAgICAgICAgdGV4dDogXCJlby1BUVwiLFxuICAgICAgICB9LFxuICAgICAgICBwcmVmZXJyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZ2VuZXJhbFByYWN0aXRpb25lcjogW1xuICAgICAge1xuICAgICAgICByZWZlcmVuY2U6XG4gICAgICAgICAgXCIvY2FyZXRlYW1fcGFydGljaXBhbnRzLzAxOWJiMDBlLTA0YWItNzYxNC1hYWI0LTFiODZiM2E5ZjEyZFwiLFxuICAgICAgICBpZGVudGlmaWVyOiBcIjAxOWJiMDBlLTA0YWItNzYxNC1hYWI0LTFiODZiM2E5ZjEyZFwiLFxuICAgICAgICBkaXNwbGF5OiBcIkRyLiBNb3JlYXVcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHJlZmVyZW5jZTpcbiAgICAgICAgICBcIi9jYXJldGVhbV9wYXJ0aWNpcGFudHMvMDE5YmIwMTYtN2FhZC03MGFmLWE1NTMtZTA1MTIzMjcxODg2XCIsXG4gICAgICAgIGlkZW50aWZpZXI6IFwiMDE5YmIwMTYtN2FhZC03MGFmLWE1NTMtZTA1MTIzMjcxODg2XCIsXG4gICAgICAgIGRpc3BsYXk6IFwiRHIuIFdlc3RcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBtYW5hZ2luZ09yZ2FuaXphdGlvbjoge1xuICAgICAgcmVmZXJlbmNlOiBcIi9vcmdhbml6YXRpb25zLzAxOWJiMDJjLTI1YzktN2E4MS04ZDJjLWNmNmI3ZjIzM2IwOFwiLFxuICAgICAgaWRlbnRpZmllcjogXCIwMTliYjAyYy0yNWM5LTdhODEtOGQyYy1jZjZiN2YyMzNiMDhcIixcbiAgICAgIGRpc3BsYXk6IFwiUmVhbCBHb29kIE1lZGljYWwgQ2FyZSBJbmMuXCIsXG4gICAgfSxcbiAgICBsaW5rOiBudWxsLFxuICB9LFxuICBcIjAxOWJiMDAzLTdkZTEtNzU1OS05OWNhLWE5MjJlMTAwOTMzOFwiOiB7XG4gICAgcmVzb3VyY2VUeXBlOiBcIlBhdGllbnRcIixcbiAgICBpZGVudGlmaWVyOiBbXG4gICAgICB7XG4gICAgICAgIHVzZTogXCJvZmZpY2lhbFwiLFxuICAgICAgICB2YWx1ZTogXCIwMTliYjAwMy03ZGUxLTc1NTktOTljYS1hOTIyZTEwMDkzMzhcIixcbiAgICAgICAgdHlwZTogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvZGluZzogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3lzdGVtOiBcIm9wZW5oaVwiLFxuICAgICAgICAgICAgICAgIHZlcnNpb246IFwidjAuMC4xXCIsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogXCJzeXN0ZW1cIixcbiAgICAgICAgICAgICAgICB1c2VyU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHRleHQ6IFwiT3BlbkhJIEludGVybmFsIElkZW50aWZpZXJcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICBuYW1lOiBbXG4gICAgICB7XG4gICAgICAgIHVzZTogXCJvZmZpY2lhbFwiLFxuICAgICAgICB0ZXh0OiBcIkRyLiBMaW5kYSBFbGlzZSBGYXJxdWFyXCIsXG4gICAgICAgIGZhbWlseTogXCJGYXJxdWFyXCIsXG4gICAgICAgIGdpdmVuOiBcIkxpbmRhXCIsXG4gICAgICAgIHByZWZpeDogXCJEci5cIixcbiAgICAgICAgc3VmZml4OiBudWxsLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHRlbGVjb206IFtcbiAgICAgIHtcbiAgICAgICAgc3lzdGVtOiBcInNtc1wiLFxuICAgICAgICB2YWx1ZTogXCIxODg4NTU1MDEwMVwiLFxuICAgICAgICB1c2U6IFwibW9iaWxlXCIsXG4gICAgICAgIHJhbms6IDMsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzeXN0ZW06IFwicGhvbmVcIixcbiAgICAgICAgdmFsdWU6IFwiMTg4ODU1NTAxMDFcIixcbiAgICAgICAgdXNlOiBcIm1vYmlsZVwiLFxuICAgICAgICByYW5rOiAxLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc3lzdGVtOiBcImVtYWlsXCIsXG4gICAgICAgIHZhbHVlOiBcImxpbmRhQGZhcnF1YXJmYW1pbHkubmV0XCIsXG4gICAgICAgIHVzZTogXCJob21lXCIsXG4gICAgICAgIHJhbms6IDIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZ2VuZGVyOiBcImZlbWFsZVwiLFxuICAgIGJpcnRoRGF0ZTogXCIxOTg0MDcyMVwiLFxuICAgIGRlY2Vhc2VkQm9vbGVhbjogZmFsc2UsXG4gICAgZGVjZWFzZWREYXRlVGltZTogbnVsbCxcbiAgICBhZGRyZXNzOiBbXG4gICAgICB7XG4gICAgICAgIHVzZTogXCJob21lXCIsXG4gICAgICAgIHR5cGU6IFwiYm90aFwiLFxuICAgICAgICB0ZXh0OiBcIjE3NzYgQW1lcmljYSBFc3BsYW5hZGUsIFNhY3JlbWVudG8sIENBIDk4MDc3XCIsXG4gICAgICAgIGxpbmU6IFwiMTc3NiBBbWVyaWNhIEVzcGxhbmFkZVwiLFxuICAgICAgICBjaXR5OiBcIlNhY3JlbWVudG9cIixcbiAgICAgICAgZGlzdHJpY3Q6IFwiU2FjcmVtZW50byBDb3VudHlcIixcbiAgICAgICAgc3RhdGU6IFwiQ0FcIixcbiAgICAgICAgcG9zdGFsQ29kZTogXCI5ODA3N1wiLFxuICAgICAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbWFyaXRhbFN0YXR1czoge1xuICAgICAgY29kaW5nOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzeXN0ZW06IFwib3BlbmhpXCIsXG4gICAgICAgICAgdmVyc2lvbjogXCJ2MC4wLjFcIixcbiAgICAgICAgICBkaXNwbGF5OiBcImFueVwiLFxuICAgICAgICAgIHVzZXJTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdGV4dDogXCJTaW5nbGVcIixcbiAgICB9LFxuICAgIG11bHRpcGxlQmlydGhCb29sZWFuOiBmYWxzZSxcbiAgICBtdWx0aXBsZUJpcnRoSW50ZWdlcjogbnVsbCxcbiAgICBjb250YWN0OiBbXSxcbiAgICBjb21tdW5pY2F0aW9uOiBbXG4gICAgICB7XG4gICAgICAgIGxhbmd1YWdlOiB7XG4gICAgICAgICAgdGV4dDogXCJlcy1NWFwiLFxuICAgICAgICB9LFxuICAgICAgICBwcmVmZXJyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYW5ndWFnZToge1xuICAgICAgICAgIHRleHQ6IFwiZW8tQVFcIixcbiAgICAgICAgfSxcbiAgICAgICAgcHJlZmVycmVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBnZW5lcmFsUHJhY3RpdGlvbmVyOiBbXG4gICAgICB7XG4gICAgICAgIHJlZmVyZW5jZTpcbiAgICAgICAgICBcIi9jYXJldGVhbV9wYXJ0aWNpcGFudHMvMDE5YmIwMGUtMDRhYi03NjE0LWFhYjQtMWI4NmIzYTlmMTJkXCIsXG4gICAgICAgIGlkZW50aWZpZXI6IFwiMDE5YmIwMGUtMDRhYi03NjE0LWFhYjQtMWI4NmIzYTlmMTJkXCIsXG4gICAgICAgIGRpc3BsYXk6IFwiRHIuIE1vcmVhdVwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcmVmZXJlbmNlOlxuICAgICAgICAgIFwiL2NhcmV0ZWFtX3BhcnRpY2lwYW50cy8wMTliYjAxNi03YWFkLTcwYWYtYTU1My1lMDUxMjMyNzE4ODZcIixcbiAgICAgICAgaWRlbnRpZmllcjogXCIwMTliYjAxNi03YWFkLTcwYWYtYTU1My1lMDUxMjMyNzE4ODZcIixcbiAgICAgICAgZGlzcGxheTogXCJEci4gV2VzdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIG1hbmFnaW5nT3JnYW5pemF0aW9uOiB7XG4gICAgICByZWZlcmVuY2U6IFwiL29yZ2FuaXphdGlvbnMvMDE5YmIwMmMtMjVjOS03YTgxLThkMmMtY2Y2YjdmMjMzYjA4XCIsXG4gICAgICBpZGVudGlmaWVyOiBcIjAxOWJiMDJjLTI1YzktN2E4MS04ZDJjLWNmNmI3ZjIzM2IwOFwiLFxuICAgICAgZGlzcGxheTogXCJSZWFsIEdvb2QgTWVkaWNhbCBDYXJlIEluYy5cIixcbiAgICB9LFxuICAgIGxpbms6IG51bGwsXG4gIH0sXG4gIFwiMDE5YmIwMDMtN2RlMS03OGM5LTkzMDUtMDFlYWYyZGQ4NTJiXCI6IHtcbiAgICByZXNvdXJjZVR5cGU6IFwiUGF0aWVudFwiLFxuICAgIGlkZW50aWZpZXI6IFtcbiAgICAgIHtcbiAgICAgICAgdXNlOiBcIm9mZmljaWFsXCIsXG4gICAgICAgIHZhbHVlOiBcIjAxOWJiMDAzLTdkZTEtNzhjOS05MzA1LTAxZWFmMmRkODUyYlwiLFxuICAgICAgICB0eXBlOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29kaW5nOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzeXN0ZW06IFwib3BlbmhpXCIsXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogXCJ2MC4wLjFcIixcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBcInN5c3RlbVwiLFxuICAgICAgICAgICAgICAgIHVzZXJTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgdGV4dDogXCJPcGVuSEkgSW50ZXJuYWwgSWRlbnRpZmllclwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgYWN0aXZlOiB0cnVlLFxuICAgIG5hbWU6IFtcbiAgICAgIHtcbiAgICAgICAgdXNlOiBcInVzdWFsXCIsXG4gICAgICAgIHRleHQ6IFwiSmFzaW1pbmUgRGF2aWRhIEVsbGlzb25cIixcbiAgICAgICAgZmFtaWx5OiBcIkVsbGlzb25cIixcbiAgICAgICAgZ2l2ZW46IFwiSmFzaW1pbmVcIixcbiAgICAgICAgcHJlZml4OiBcIk1zLlwiLFxuICAgICAgICBzdWZmaXg6IG51bGwsXG4gICAgICB9LFxuICAgIF0sXG4gICAgdGVsZWNvbTogW1xuICAgICAge1xuICAgICAgICBzeXN0ZW06IFwicGhvbmVcIixcbiAgICAgICAgdmFsdWU6IFwiMTg4ODU1NTAxMDJcIixcbiAgICAgICAgdXNlOiBcImhvbWVcIixcbiAgICAgICAgcmFuazogMixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHN5c3RlbTogXCJmYXhcIixcbiAgICAgICAgdmFsdWU6IFwiMTg4ODU1NTAxMDNcIixcbiAgICAgICAgdXNlOiBcImhvbWVcIixcbiAgICAgICAgcmFuazogMSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBnZW5kZXI6IFwiZmVtYWxlXCIsXG4gICAgYmlydGhEYXRlOiBcIjE5NzYwMTAxXCIsXG4gICAgZGVjZWFzZWRCb29sZWFuOiBmYWxzZSxcbiAgICBkZWNlYXNlZERhdGVUaW1lOiBudWxsLFxuICAgIGFkZHJlc3M6IFtcbiAgICAgIHtcbiAgICAgICAgdXNlOiBcImhvbWVcIixcbiAgICAgICAgdHlwZTogXCJib3RoXCIsXG4gICAgICAgIHRleHQ6IFwiMTA4OCBIYXN0aW5ncyBCbHZkLiwgTmV3IE9ybGVhbnMsIExBLCA3ODkxMlwiLFxuICAgICAgICBsaW5lOiBcIjEwODggSGFzdGluZ3MgQmx2ZC5cIixcbiAgICAgICAgY2l0eTogXCJOZXcgT3JsZWFuc1wiLFxuICAgICAgICBkaXN0cmljdDogXCJPcmxlYW5zIFBhcmlzaFwiLFxuICAgICAgICBzdGF0ZTogXCJMQVwiLFxuICAgICAgICBwb3N0YWxDb2RlOiBcIjc4OTEyXCIsXG4gICAgICAgIGNvdW50cnk6IFwiVVNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBtYXJpdGFsU3RhdHVzOiB7XG4gICAgICBjb2Rpbmc6IFtcbiAgICAgICAge1xuICAgICAgICAgIHN5c3RlbTogXCJvcGVuaGlcIixcbiAgICAgICAgICB2ZXJzaW9uOiBcInYwLjAuMVwiLFxuICAgICAgICAgIGRpc3BsYXk6IFwiYW55XCIsXG4gICAgICAgICAgdXNlclNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB0ZXh0OiBcIlNpbmdsZVwiLFxuICAgIH0sXG4gICAgbXVsdGlwbGVCaXJ0aEJvb2xlYW46IHRydWUsXG4gICAgbXVsdGlwbGVCaXJ0aEludGVnZXI6IDMsXG4gICAgY29udGFjdDogbnVsbCxcbiAgICBjb21tdW5pY2F0aW9uOiBbXG4gICAgICB7XG4gICAgICAgIGxhbmd1YWdlOiB7XG4gICAgICAgICAgdGV4dDogXCJlbi1VU1wiLFxuICAgICAgICB9LFxuICAgICAgICBwcmVmZXJyZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFuZ3VhZ2U6IHtcbiAgICAgICAgICB0ZXh0OiBcImZyLUFRXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHByZWZlcnJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBnZW5lcmFsUHJhY3RpdGlvbmVyOiBbXG4gICAgICB7XG4gICAgICAgIHJlZmVyZW5jZTpcbiAgICAgICAgICBcIi9jYXJldGVhbV9wYXJ0aWNpcGFudHMvMDE5YmIwMGUtMDRhYi03NjE0LWFhYjQtMWI4NmIzYTlmMTJkXCIsXG4gICAgICAgIGlkZW50aWZpZXI6IFwiMDE5YmIwMGUtMDRhYi03NjE0LWFhYjQtMWI4NmIzYTlmMTJkXCIsXG4gICAgICAgIGRpc3BsYXk6IFwiRHIuIE1vcmVhdVwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcmVmZXJlbmNlOlxuICAgICAgICAgIFwiL2NhcmV0ZWFtX3BhcnRpY2lwYW50cy8wMTliYjAxNi03YWFkLTcwYWYtYTU1My1lMDUxMjMyNzE4ODZcIixcbiAgICAgICAgaWRlbnRpZmllcjogXCIwMTliYjAxNi03YWFkLTcwYWYtYTU1My1lMDUxMjMyNzE4ODZcIixcbiAgICAgICAgZGlzcGxheTogXCJEci4gV2VzdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIG1hbmFnaW5nT3JnYW5pemF0aW9uOiB7XG4gICAgICByZWZlcmVuY2U6IFwiL29yZ2FuaXphdGlvbnMvMDE5YmIwMmMtMjVjOS03YTgxLThkMmMtY2Y2YjdmMjMzYjA4XCIsXG4gICAgICBpZGVudGlmaWVyOiBcIjAxOWJiMDJjLTI1YzktN2E4MS04ZDJjLWNmNmI3ZjIzM2IwOFwiLFxuICAgICAgZGlzcGxheTogXCJSZWFsIEdvb2QgTWVkaWNhbCBDYXJlIEluYy5cIixcbiAgICB9LFxuICAgIGxpbms6IG51bGwsXG4gIH0sXG4gIFwiMDE5YmIwMDMtN2RlMS03ZmExLTk1MzItM2RlNTQ2Mjc5MjNiXCI6IHtcbiAgICBpZGVudGlmaWVyOiBbXG4gICAgICB7XG4gICAgICAgIHVzZTogXCJvZmZpY2lhbFwiLFxuICAgICAgICB2YWx1ZTogXCIwMTliYjAwMy03ZGUxLTdmYTEtOTUzMi0zZGU1NDYyNzkyM2JcIixcbiAgICAgICAgdHlwZTogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvZGluZzogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3lzdGVtOiBcIm9wZW5oaVwiLFxuICAgICAgICAgICAgICAgIHZlcnNpb246IFwidjAuMC4xXCIsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogXCJzeXN0ZW1cIixcbiAgICAgICAgICAgICAgICB1c2VyU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHRleHQ6IFwiT3BlbkhJIEludGVybmFsIElkZW50aWZpZXJcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICBuYW1lOiBbXG4gICAgICB7XG4gICAgICAgIHVzZTogXCJ1c3VhbFwiLFxuICAgICAgICB0ZXh0OiBcIkRyLiBNYXJpbyBMdWlnaSBNdXNocm9vbVwiLFxuICAgICAgICBmYW1pbHk6IFwiTXVzaHJvb21cIixcbiAgICAgICAgZ2l2ZW46IFwiTWFyaW9cIixcbiAgICAgICAgcHJlZml4OiBcIkRyLlwiLFxuICAgICAgICBzdWZmaXg6IG51bGwsXG4gICAgICB9LFxuICAgIF0sXG4gICAgdGVsZWNvbTogW1xuICAgICAge1xuICAgICAgICBzeXN0ZW06IFwiZW1haWxcIixcbiAgICAgICAgdmFsdWU6IFwibWFyaW9AbXVzaHJvb21raW5nZG9tLm9yZ1wiLFxuICAgICAgICB1c2U6IFwiaG9tZVwiLFxuICAgICAgICByYW5rOiAxLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc3lzdGVtOiBcInNtc1wiLFxuICAgICAgICB2YWx1ZTogXCIxODg4NTU1MDEwNFwiLFxuICAgICAgICB1c2U6IFwibW9iaWxlXCIsXG4gICAgICAgIHJhbms6IDIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzeXN0ZW06IFwicGhvbmVcIixcbiAgICAgICAgdmFsdWU6IFwiMTg4ODU1NTAxMDNcIixcbiAgICAgICAgdXNlOiBcIm1vYmlsZVwiLFxuICAgICAgICByYW5rOiAzLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdlbmRlcjogXCJtYWxlXCIsXG4gICAgYmlydGhEYXRlOiBcIjE5ODEwNzA5XCIsXG4gICAgZGVjZWFzZWRCb29sZWFuOiBmYWxzZSxcbiAgICBkZWNlYXNlZERhdGVUaW1lOiBudWxsLFxuICAgIGFkZHJlc3M6IFtcbiAgICAgIHtcbiAgICAgICAgdXNlOiBcImhvbWVcIixcbiAgICAgICAgdHlwZTogXCJib3RoXCIsXG4gICAgICAgIHRleHQ6IFwiNjU3IEdyZWVuIFNoZWxsIExhbmUsIE5ZQywgTlkgMTEyMzZcIixcbiAgICAgICAgbGluZTogXCI2NTcgR3JlZW4gU2hlbGwgTGFuZVwiLFxuICAgICAgICBjaXR5OiBcIk5ldyBZb3JrIENpdHlcIixcbiAgICAgICAgZGlzdHJpY3Q6IFwiS2luZ3MgQ291bnR5XCIsXG4gICAgICAgIHN0YXRlOiBcIk5ZXCIsXG4gICAgICAgIHBvc3RhbENvZGU6IFwiMTEyMzZcIixcbiAgICAgICAgY291bnRyeTogXCJVU1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIG1hcml0YWxTdGF0dXM6IHtcbiAgICAgIGNvZGluZzogW1xuICAgICAgICB7XG4gICAgICAgICAgc3lzdGVtOiBcIm9wZW5oaVwiLFxuICAgICAgICAgIHZlcnNpb246IFwidjAuMC4xXCIsXG4gICAgICAgICAgZGlzcGxheTogXCJhbnlcIixcbiAgICAgICAgICB1c2VyU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHRleHQ6IFwiU2luZ2xlXCIsXG4gICAgfSxcbiAgICBtdWx0aXBsZUJpcnRoQm9vbGVhbjogZmFsc2UsXG4gICAgbXVsdGlwbGVCaXJ0aEludGVnZXI6IDEsXG4gICAgY29udGFjdDogW10sXG4gICAgY29tbXVuaWNhdGlvbjogW1xuICAgICAge1xuICAgICAgICBsYW5ndWFnZToge1xuICAgICAgICAgIHRleHQ6IFwiZW4tVVNcIixcbiAgICAgICAgfSxcbiAgICAgICAgcHJlZmVycmVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhbmd1YWdlOiB7XG4gICAgICAgICAgdGV4dDogXCJlby1BUVwiLFxuICAgICAgICB9LFxuICAgICAgICBwcmVmZXJyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZ2VuZXJhbFByYWN0aXRpb25lcjogW1xuICAgICAge1xuICAgICAgICByZWZlcmVuY2U6XG4gICAgICAgICAgXCIvY2FyZXRlYW1fcGFydGljaXBhbnRzLzAxOWJiMDBlLTA0YWItNzYxNC1hYWI0LTFiODZiM2E5ZjEyZFwiLFxuICAgICAgICBpZGVudGlmaWVyOiBcIjAxOWJiMDBlLTA0YWItNzYxNC1hYWI0LTFiODZiM2E5ZjEyZFwiLFxuICAgICAgICBkaXNwbGF5OiBcIkRyLiBNb3JlYXVcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHJlZmVyZW5jZTpcbiAgICAgICAgICBcIi9jYXJldGVhbV9wYXJ0aWNpcGFudHMvMDE5YmIwMTYtN2FhZC03MGFmLWE1NTMtZTA1MTIzMjcxODg2XCIsXG4gICAgICAgIGlkZW50aWZpZXI6IFwiMDE5YmIwMTYtN2FhZC03MGFmLWE1NTMtZTA1MTIzMjcxODg2XCIsXG4gICAgICAgIGRpc3BsYXk6IFwiRHIuIFdlc3RcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBtYW5hZ2luZ09yZ2FuaXphdGlvbjoge1xuICAgICAgcmVmZXJlbmNlOiBcIi9vcmdhbml6YXRpb25zLzAxOWJiMDJjLTI1YzktN2E4MS04ZDJjLWNmNmI3ZjIzM2IwOFwiLFxuICAgICAgaWRlbnRpZmllcjogXCIwMTliYjAyYy0yNWM5LTdhODEtOGQyYy1jZjZiN2YyMzNiMDhcIixcbiAgICAgIGRpc3BsYXk6IFwiUmVhbCBHb29kIE1lZGljYWwgQ2FyZSBJbmMuXCIsXG4gICAgfSxcbiAgICBsaW5rOiBudWxsLFxuICB9LFxufTtcblxuY29uc3QgY2FyZVRlYW1QYXJ0aWNpcGFudHNNb2NrOiBEaWN0aW9uYXJ5ID0ge1xuICBcIjAxOWJiMDBlLTA0YWItNzYxNC1hYWI0LTFiODZiM2E5ZjEyZFwiOiB7XG4gICAgcm9sZToge1xuICAgICAgY29kaW5nOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzeXN0ZW06IFwib3BlbmhpXCIsXG4gICAgICAgICAgdmVyc2lvbjogXCJ2MC4wLjFcIixcbiAgICAgICAgICBkaXNwbGF5OiBcImFueVwiLFxuICAgICAgICAgIHVzZXJTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdGV4dDogXCJQcmltYXJ5IGNhcmUgcGh5c2ljaWFuXCIsXG4gICAgfSxcbiAgICBtZW1iZXI6IHtcbiAgICAgIHJlZmVyZW5jZTogXCIvcGVyc29ucy8wMTliYjA1OC0yODI0LTdjMjYtOWNmZC0wOTI1N2NiOThjNzVcIixcbiAgICAgIGlkZW50aWZpZXI6IFwiMDE5YmIwNTgtMjgyNC03YzI2LTljZmQtMDkyNTdjYjk4Yzc1XCIsXG4gICAgICBkaXNwbGF5OiBcIkRyLiBNb3JlYXVcIixcbiAgICB9LFxuICAgIG9uQmVoYWxmT2Y6IHtcbiAgICAgIHJlZmVyZW5jZTogXCIvb3JnYW5pemF0aW9ucy8wMTliYjAyYy0yNWM5LTdhODEtOGQyYy1jZjZiN2YyMzNiMDhcIixcbiAgICAgIGlkZW50aWZpZXI6IFwiMDE5YmIwMmMtMjVjOS03YTgxLThkMmMtY2Y2YjdmMjMzYjA4XCIsXG4gICAgICBkaXNwbGF5OiBcIlJlYWwgR29vZCBNZWRpY2FsIENhcmUgSW5jLlwiLFxuICAgIH0sXG4gIH0sXG4gIFwiMDE5YmIwMTYtN2FhZC03MGFmLWE1NTMtZTA1MTIzMjcxODg2XCI6IHtcbiAgICByb2xlOiB7XG4gICAgICBjb2Rpbmc6IFtcbiAgICAgICAge1xuICAgICAgICAgIHN5c3RlbTogXCJvcGVuaGlcIixcbiAgICAgICAgICB2ZXJzaW9uOiBcInYwLjAuMVwiLFxuICAgICAgICAgIGRpc3BsYXk6IFwiYW55XCIsXG4gICAgICAgICAgdXNlclNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB0ZXh0OiBcIlByaW1hcnkgY2FyZSBwaHlzaWNpYW5cIixcbiAgICB9LFxuICAgIG1lbWJlcjoge1xuICAgICAgcmVmZXJlbmNlOiBcIi9wZXJzb25zLzAxOWJiMDU5LTJkOTUtN2M5Ni1iMTVkLTc1ZmJiNmRkZmQyNVwiLFxuICAgICAgaWRlbnRpZmllcjogXCIwMTliYjA1OS0yZDk1LTdjOTYtYjE1ZC03NWZiYjZkZGZkMjVcIixcbiAgICAgIGRpc3BsYXk6IFwiRHIuIFdlc3RcIixcbiAgICB9LFxuICAgIG9uQmVoYWxmT2Y6IHtcbiAgICAgIHJlZmVyZW5jZTogXCIvb3JnYW5pemF0aW9ucy8wMTliYjAyYy0yNWM5LTdhODEtOGQyYy1jZjZiN2YyMzNiMDhcIixcbiAgICAgIGlkZW50aWZpZXI6IFwiMDE5YmIwMmMtMjVjOS03YTgxLThkMmMtY2Y2YjdmMjMzYjA4XCIsXG4gICAgICBkaXNwbGF5OiBcIlJlYWwgR29vZCBNZWRpY2FsIENhcmUgSW5jLlwiLFxuICAgIH0sXG4gIH0sXG59O1xuXG5jb25zdCBvcmdhbml6YXRpb25zTW9jazogRGljdGlvbmFyeSA9IHtcbiAgXCIwMTliYjAyYy0yNWM5LTdhODEtOGQyYy1jZjZiN2YyMzNiMDhcIjoge1xuICAgIHJlc291cmNlVHlwZTogXCJPcmdhbml6YXRpb25cIixcbiAgICBpZGVudGlmaWVyOiBbXG4gICAgICB7XG4gICAgICAgIHVzZTogXCJvZmZpY2lhbFwiLFxuICAgICAgICB2YWx1ZTogXCIwMTliYjAyYy0yNWM5LTdhODEtOGQyYy1jZjZiN2YyMzNiMDhcIixcbiAgICAgICAgdHlwZTogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvZGluZzogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3lzdGVtOiBcIm9wZW5oaVwiLFxuICAgICAgICAgICAgICAgIHZlcnNpb246IFwidjAuMC4xXCIsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogXCJzeXN0ZW1cIixcbiAgICAgICAgICAgICAgICB1c2VyU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHRleHQ6IFwiT3BlbkhJIEludGVybmFsIElkZW50aWZpZXJcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICB0eXBlOiBbXG4gICAgICB7XG4gICAgICAgIGNvZGluZzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN5c3RlbTogXCJvcGVuaGlcIixcbiAgICAgICAgICAgIHZlcnNpb246IFwidjAuMC4xXCIsXG4gICAgICAgICAgICBkaXNwbGF5OiBcImFsbFwiLFxuICAgICAgICAgICAgdXNlclNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB0ZXh0OiBcIlByaW1hcnkgQ2FyZSBGYWNpbGl0eVwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIG5hbWU6IFwiUmVhbCBHb29kIE1lZGljYWwgQ2FyZSBJbmMuXCIsXG4gICAgYWxpYXM6IFtcIlJlYWwgR29vZCBIZWFsdGhjYXJlXCIsIFwiUmVhbCBHb29kIERvY3RvcnNcIiwgXCJIZWFsdGggV2l6YXJkc1wiXSxcbiAgICB0ZWxlY29tOiBbXG4gICAgICB7XG4gICAgICAgIHN5c3RlbTogXCJlbWFpbFwiLFxuICAgICAgICB2YWx1ZTogXCJjb250YWN0QHJlYWxnb29kbWVkaWNhbGNhcmUuY28udWtcIixcbiAgICAgICAgdXNlOiBcIndvcmtcIixcbiAgICAgICAgcmFuazogMyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHN5c3RlbTogXCJmYXhcIixcbiAgICAgICAgdmFsdWU6IFwiMTg4ODU1NTAxMDdcIixcbiAgICAgICAgdXNlOiBcIndvcmtcIixcbiAgICAgICAgcmFuazogMixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHN5c3RlbTogXCJwaG9uZVwiLFxuICAgICAgICB2YWx1ZTogXCIxODg4NTU1MDEwNlwiLFxuICAgICAgICB1c2U6IFwid29ya1wiLFxuICAgICAgICByYW5rOiAxLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGFkZHJlc3M6IFtcbiAgICAgIHtcbiAgICAgICAgdXNlOiBcIndvcmtcIixcbiAgICAgICAgdHlwZTogXCJib3RoXCIsXG4gICAgICAgIHRleHQ6IFwiMTIwMiBOYXBvbGVvbiBBdmUuLCBLYWxhbWF6b28sIE1JIDc2NTQzXCIsXG4gICAgICAgIGxpbmU6IFwiMTIwMiBOYXBvbGVvbiBBdmUuXCIsXG4gICAgICAgIGNpdHk6IFwiS2FsYW1hem9vXCIsXG4gICAgICAgIGRpc3RyaWN0OiBcIkthbGFtYXpvbyBDb3VudHlcIixcbiAgICAgICAgc3RhdGU6IFwiTUlcIixcbiAgICAgICAgcG9zdGFsQ29kZTogXCI3NjU0M1wiLFxuICAgICAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgcGFydE9mOiBudWxsLFxuICAgIGNvbnRhY3Q6IFtdLFxuICAgIGVuZHBvaW50OiBudWxsLFxuICB9LFxufTtcblxuZXhwb3J0IHsgcGF0aWVudHNNb2NrLCBjYXJlVGVhbVBhcnRpY2lwYW50c01vY2ssIG9yZ2FuaXphdGlvbnNNb2NrIH07XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { Express } from "express";
2
+ declare const app: Express;
3
+ export { app };
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.app = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const cors_1 = __importDefault(require("cors"));
9
+ const express_1 = __importDefault(require("express"));
10
+ const open_hi_context_1 = require("../middleware/open-hi-context");
11
+ const Patient_1 = require("./ehr/r4/Patient");
12
+ const app = (0, express_1.default)();
13
+ exports.app = app;
14
+ app.set("view engine", "ejs");
15
+ app.set("views", path_1.default.join(__dirname, "views"));
16
+ app.use((0, cors_1.default)());
17
+ app.use(express_1.default.json());
18
+ app.use(express_1.default.urlencoded({ extended: true }));
19
+ app.get("/", (_req, res) => {
20
+ return res.status(200).json({ message: "POC App is running" });
21
+ });
22
+ // Tenant/workspace resolved from headers/env (or JWT when implemented); attached to req for /ehr routes
23
+ app.use("/ehr", open_hi_context_1.openHiContextMiddleware);
24
+ // FHIR R4 EHR endpoints: path structure mirrors folder structure (ehr/r4/Patient.ts → /ehr/r4/Patient)
25
+ app.use("/ehr/r4/Patient", Patient_1.patientRouter);
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YS9yZXN0LWFwaS9yZXN0LWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxnREFBd0I7QUFDeEIsZ0RBQXdCO0FBQ3hCLHNEQUE4RDtBQUM5RCxtRUFBd0U7QUFDeEUsOENBQWlEO0FBRWpELE1BQU0sR0FBRyxHQUFZLElBQUEsaUJBQU8sR0FBRSxDQUFDO0FBbUJ0QixrQkFBRztBQWpCWixHQUFHLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QixHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBRWhELEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBQSxjQUFJLEdBQUUsQ0FBQyxDQUFDO0FBQ2hCLEdBQUcsQ0FBQyxHQUFHLENBQUMsaUJBQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLEdBQUcsQ0FBQyxHQUFHLENBQUMsaUJBQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRWhELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBYSxFQUFFLEdBQWEsRUFBRSxFQUFFO0lBQzVDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFLENBQUMsQ0FBQyxDQUFDO0FBRUgsd0dBQXdHO0FBQ3hHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLHlDQUF1QixDQUFDLENBQUM7QUFFekMsdUdBQXVHO0FBQ3ZHLEdBQUcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsdUJBQWEsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBjb3JzIGZyb20gXCJjb3JzXCI7XG5pbXBvcnQgZXhwcmVzcywgeyBFeHByZXNzLCBSZXF1ZXN0LCBSZXNwb25zZSB9IGZyb20gXCJleHByZXNzXCI7XG5pbXBvcnQgeyBvcGVuSGlDb250ZXh0TWlkZGxld2FyZSB9IGZyb20gXCIuLi9taWRkbGV3YXJlL29wZW4taGktY29udGV4dFwiO1xuaW1wb3J0IHsgcGF0aWVudFJvdXRlciB9IGZyb20gXCIuL2Voci9yNC9QYXRpZW50XCI7XG5cbmNvbnN0IGFwcDogRXhwcmVzcyA9IGV4cHJlc3MoKTtcblxuYXBwLnNldChcInZpZXcgZW5naW5lXCIsIFwiZWpzXCIpO1xuYXBwLnNldChcInZpZXdzXCIsIHBhdGguam9pbihfX2Rpcm5hbWUsIFwidmlld3NcIikpO1xuXG5hcHAudXNlKGNvcnMoKSk7XG5hcHAudXNlKGV4cHJlc3MuanNvbigpKTtcbmFwcC51c2UoZXhwcmVzcy51cmxlbmNvZGVkKHsgZXh0ZW5kZWQ6IHRydWUgfSkpO1xuXG5hcHAuZ2V0KFwiL1wiLCAoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICByZXR1cm4gcmVzLnN0YXR1cygyMDApLmpzb24oeyBtZXNzYWdlOiBcIlBPQyBBcHAgaXMgcnVubmluZ1wiIH0pO1xufSk7XG5cbi8vIFRlbmFudC93b3Jrc3BhY2UgcmVzb2x2ZWQgZnJvbSBoZWFkZXJzL2VudiAob3IgSldUIHdoZW4gaW1wbGVtZW50ZWQpOyBhdHRhY2hlZCB0byByZXEgZm9yIC9laHIgcm91dGVzXG5hcHAudXNlKFwiL2VoclwiLCBvcGVuSGlDb250ZXh0TWlkZGxld2FyZSk7XG5cbi8vIEZISVIgUjQgRUhSIGVuZHBvaW50czogcGF0aCBzdHJ1Y3R1cmUgbWlycm9ycyBmb2xkZXIgc3RydWN0dXJlIChlaHIvcjQvUGF0aWVudC50cyDihpIgL2Voci9yNC9QYXRpZW50KVxuYXBwLnVzZShcIi9laHIvcjQvUGF0aWVudFwiLCBwYXRpZW50Um91dGVyKTtcblxuZXhwb3J0IHsgYXBwIH07XG4iXX0=