@rudderstack/integrations-lib 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -344,6 +344,14 @@ describe('JSON utils', () => {
344
344
  excludes: ['item2'],
345
345
  },
346
346
  },
347
+ // warning log
348
+ {
349
+ sourceKeys: ['properties.orderId'],
350
+ destKey: 'inventory2',
351
+ metadata: {
352
+ excludes: ['item2'],
353
+ },
354
+ },
347
355
  {
348
356
  sourceKeys: ['properties.item'],
349
357
  destKey: 'itemName',
@@ -368,6 +376,7 @@ describe('JSON utils', () => {
368
376
  inventory: {
369
377
  item1: 'item1',
370
378
  },
379
+ inventory2: 12345,
371
380
  itemName: 'mob',
372
381
  random: 'random',
373
382
  timestamp: '2021-09-01T00:00:00+0000',
@@ -375,8 +384,587 @@ describe('JSON utils', () => {
375
384
  const payload = json_1.JsonUtils.constructPayload(message, mappingJson);
376
385
  expect(payload).toEqual(expectedPayload);
377
386
  });
387
+ it('should return proper value when allowedKeyCheck contains the value', () => {
388
+ const message = {
389
+ event: 'purchase',
390
+ properties: {
391
+ item: 'Mobile',
392
+ },
393
+ timeStamp: '2021-09-01T00:00:00.000Z',
394
+ };
395
+ const mappingJson = [
396
+ {
397
+ sourceKeys: ['properties.item'],
398
+ destKey: 'itemName',
399
+ metadata: {
400
+ allowedKeyCheck: [
401
+ {
402
+ sourceVal: ['Mobile', 'Telephone'],
403
+ },
404
+ ],
405
+ },
406
+ },
407
+ ];
408
+ const expectedPayload = {
409
+ itemName: 'Mobile',
410
+ };
411
+ const payload = json_1.JsonUtils.constructPayload(message, mappingJson);
412
+ expect(payload).toEqual(expectedPayload);
413
+ });
414
+ it('should return undefined when allowedKeyCheck does not contains the value', () => {
415
+ const message = {
416
+ event: 'purchase',
417
+ properties: {
418
+ item: 'Mobile',
419
+ },
420
+ timeStamp: '2021-09-01T00:00:00.000Z',
421
+ };
422
+ const mappingJson = [
423
+ {
424
+ sourceKeys: ['properties.item'],
425
+ destKey: 'itemName',
426
+ metadata: {
427
+ allowedKeyCheck: [
428
+ {
429
+ sourceVal: ['Dum', 'Telephone'],
430
+ },
431
+ ],
432
+ },
433
+ },
434
+ ];
435
+ const expectedPayload = {
436
+ itemName: undefined,
437
+ };
438
+ const payload = json_1.JsonUtils.constructPayload(message, mappingJson);
439
+ expect(payload).toEqual(expectedPayload);
440
+ });
441
+ it('should return lowercased value when allowedKeyCheck does not contains the value', () => {
442
+ const message = {
443
+ event: 'purchase',
444
+ properties: {
445
+ item: 'Mobile',
446
+ },
447
+ timeStamp: '2021-09-01T00:00:00.000Z',
448
+ };
449
+ const mappingJson = [
450
+ {
451
+ sourceKeys: ['properties.item'],
452
+ destKey: 'itemName',
453
+ metadata: {
454
+ allowedKeyCheck: [
455
+ {
456
+ sourceVal: ['mobile', 'telephone'],
457
+ type: 'toLowerCase',
458
+ },
459
+ ],
460
+ },
461
+ },
462
+ ];
463
+ const expectedPayload = {
464
+ itemName: 'mobile',
465
+ };
466
+ const payload = json_1.JsonUtils.constructPayload(message, mappingJson);
467
+ expect(payload).toEqual(expectedPayload);
468
+ });
469
+ it('should return uppercased value when allowedKeyCheck does not contains the value', () => {
470
+ const message = {
471
+ event: 'purchase',
472
+ properties: {
473
+ item: 'Mobile',
474
+ },
475
+ timeStamp: '2021-09-01T00:00:00.000Z',
476
+ };
477
+ const mappingJson = [
478
+ {
479
+ sourceKeys: ['properties.item'],
480
+ destKey: 'itemName',
481
+ metadata: {
482
+ allowedKeyCheck: [
483
+ {
484
+ sourceVal: ['MOBILE', 'TEL'],
485
+ type: 'toUpperCase',
486
+ },
487
+ ],
488
+ },
489
+ },
490
+ ];
491
+ const expectedPayload = {
492
+ itemName: 'MOBILE',
493
+ };
494
+ const payload = json_1.JsonUtils.constructPayload(message, mappingJson);
495
+ expect(payload).toEqual(expectedPayload);
496
+ });
497
+ it('should return correctly validated timestamp values', () => {
498
+ // @ts-expect-error: this is a mock
499
+ Date.now = jest.fn(() => new Date('2021-09-01T02:00:01.000Z'));
500
+ const message = {
501
+ timeStamp1: 1630461600000,
502
+ timeStamp2: 1630461542000,
503
+ timeStamp3: 1630465140000,
504
+ timeStamp4: 1630465140000, // '2021-09-01T02:59:00.000Z',
505
+ };
506
+ const mappingJson = [
507
+ {
508
+ sourceKeys: ['timeStamp1'],
509
+ destKey: 'time1',
510
+ metadata: {
511
+ validateTimestamp: {
512
+ allowedFutureTimeDifference: 1,
513
+ allowedFutureTimeUnit: 'seconds',
514
+ },
515
+ },
516
+ },
517
+ {
518
+ sourceKeys: ['timeStamp2'],
519
+ destKey: 'time2',
520
+ metadata: {
521
+ validateTimestamp: {
522
+ allowedPastTimeDifference: 1,
523
+ allowedPastTimeUnit: 'minutes',
524
+ },
525
+ },
526
+ },
527
+ {
528
+ sourceKeys: ['timeStamp3'],
529
+ destKey: 'time3',
530
+ metadata: {
531
+ validateTimestamp: {
532
+ allowedFutureTimeDifference: 1,
533
+ allowedFutureTimeUnit: 'hours',
534
+ },
535
+ },
536
+ },
537
+ {
538
+ sourceKeys: ['timeStamp2'],
539
+ destKey: 'time4',
540
+ metadata: {
541
+ validateTimestamp: {
542
+ allowedPastTimeDifference: 75,
543
+ allowedPastTimeUnit: 'seconds',
544
+ },
545
+ },
546
+ },
547
+ {
548
+ sourceKeys: ['timeStamp2'],
549
+ destKey: 'time5',
550
+ metadata: {
551
+ validateTimestamp: {
552
+ allowedPastTimeDifference: 1,
553
+ allowedPastTimeUnit: 'hours',
554
+ },
555
+ },
556
+ },
557
+ {
558
+ sourceKeys: ['timeStamp4'],
559
+ destKey: 'time6',
560
+ metadata: {
561
+ validateTimestamp: {
562
+ allowedFutureTimeDifference: 1,
563
+ allowedFutureTimeUnit: 'days',
564
+ },
565
+ },
566
+ },
567
+ {
568
+ sourceKeys: ['timeStamp2'],
569
+ destKey: 'time7',
570
+ metadata: {
571
+ validateTimestamp: {
572
+ allowedPastTimeDifference: 1,
573
+ allowedPastTimeUnit: 'days',
574
+ },
575
+ },
576
+ },
577
+ ];
578
+ const expectedPayload = {
579
+ time1: 1630461600000,
580
+ time2: 1630461542000,
581
+ time4: 1630461542000,
582
+ time5: 1630461542000,
583
+ time3: 1630465140000,
584
+ time6: 1630465140000,
585
+ time7: 1630461542000, // '2021-09-01T02:59:00.000Z',
586
+ };
587
+ const payload = json_1.JsonUtils.constructPayload(message, mappingJson);
588
+ expect(payload).toEqual(expectedPayload);
589
+ });
590
+ it('should throw when the timestamp is more than allowed into the past', () => {
591
+ // @ts-expect-error: this is a mock
592
+ Date.now = jest.fn(() => new Date('2021-09-01T02:00:01.000Z'));
593
+ const message = {
594
+ timeStamp2: 1630461545000, // '2021-09-01T01:59:05.000Z',
595
+ };
596
+ const mappingJson = [
597
+ {
598
+ sourceKeys: ['timeStamp2'],
599
+ destKey: 'time1',
600
+ metadata: {
601
+ validateTimestamp: {
602
+ allowedPastTimeDifference: 1,
603
+ allowedPastTimeUnit: 'seconds',
604
+ },
605
+ },
606
+ },
607
+ ];
608
+ expect(() => {
609
+ json_1.JsonUtils.constructPayload(message, mappingJson);
610
+ }).toThrow('Allowed timestamp is [1 seconds] into the past');
611
+ });
612
+ it('should throw when the timestamp is more than allowed into the future', () => {
613
+ // @ts-expect-error: this is a mock
614
+ Date.now = jest.fn(() => new Date('2021-09-01T01:50:01.000Z'));
615
+ const message = {
616
+ timeStamp2: 1630461545000, // '2021-09-01T01:59:05.000Z',
617
+ };
618
+ const mappingJson = [
619
+ {
620
+ sourceKeys: ['timeStamp2'],
621
+ destKey: 'time1',
622
+ metadata: {
623
+ validateTimestamp: {
624
+ allowedFutureTimeDifference: 2,
625
+ allowedFutureTimeUnit: 'minutes',
626
+ },
627
+ },
628
+ },
629
+ ];
630
+ expect(() => {
631
+ json_1.JsonUtils.constructPayload(message, mappingJson);
632
+ }).toThrow('Allowed timestamp is [2 minutes] into the future');
633
+ });
634
+ it('should throw when the timestamp is string and not a number', () => {
635
+ // @ts-expect-error: this is a mock
636
+ Date.now = jest.fn(() => new Date('2021-09-01T01:50:01.000Z'));
637
+ const message = {
638
+ timeStamp2: '2021-09-01T01:50:01.000Z', // '2021-09-01T01:59:05.000Z',
639
+ };
640
+ const mappingJson = [
641
+ {
642
+ sourceKeys: ['timeStamp2'],
643
+ destKey: 'time1',
644
+ metadata: {
645
+ validateTimestamp: {
646
+ allowedFutureTimeDifference: 2,
647
+ allowedFutureTimeUnit: 'minutes',
648
+ },
649
+ },
650
+ },
651
+ ];
652
+ expect(() => {
653
+ json_1.JsonUtils.constructPayload(message, mappingJson);
654
+ }).toThrow('Timestamp is not a number, cannot validate');
655
+ });
656
+ it('should perform trim, secondTimestamp & micro, dobInMMDD, toInt, toLower, toFloat, IsBoolean, domainUrlV2, domainUrl, getOffsetInSec, jsonStringifyOnObject', () => {
657
+ const message = {
658
+ trimm: ' Spaced string ',
659
+ bool: true,
660
+ url: 'https://www.ggoole.com',
661
+ tz: 'America/New_York',
662
+ etz: 'Am0',
663
+ obj: { a: 1, b: 'ball' },
664
+ fl: '12.8818',
665
+ dob: '2012-01-01',
666
+ time: '2021-09-01T01:59:05.000Z',
667
+ };
668
+ const mappingJson = [
669
+ {
670
+ sourceKeys: ['trimm'],
671
+ destKey: 'trimmed',
672
+ metadata: {
673
+ type: ['trim', 'toLower'],
674
+ },
675
+ },
676
+ {
677
+ sourceKeys: ['trimm'],
678
+ destKey: 'isbool',
679
+ metadata: {
680
+ type: ['IsBoolean'],
681
+ },
682
+ },
683
+ {
684
+ sourceKeys: ['bool'],
685
+ destKey: 'isbool2',
686
+ metadata: {
687
+ type: ['IsBoolean'],
688
+ },
689
+ },
690
+ {
691
+ sourceKeys: ['url'],
692
+ destKey: 'UrlV2',
693
+ metadata: {
694
+ type: ['domainUrlV2'],
695
+ },
696
+ },
697
+ {
698
+ sourceKeys: ['url'],
699
+ destKey: 'Url',
700
+ metadata: {
701
+ type: ['domainUrl'],
702
+ },
703
+ },
704
+ {
705
+ sourceKeys: ['tz'],
706
+ destKey: 'offset',
707
+ metadata: {
708
+ type: ['getOffsetInSec'],
709
+ },
710
+ },
711
+ {
712
+ sourceKeys: ['obj'],
713
+ destKey: 'object',
714
+ metadata: {
715
+ type: ['jsonStringifyOnObject'],
716
+ },
717
+ },
718
+ {
719
+ sourceKeys: ['etz'],
720
+ destKey: 'eoffset',
721
+ metadata: {
722
+ type: ['getOffsetInSec'],
723
+ },
724
+ },
725
+ {
726
+ sourceKeys: ['fl'],
727
+ destKey: 'flV',
728
+ metadata: {
729
+ type: ['toFloat'],
730
+ },
731
+ },
732
+ {
733
+ sourceKeys: ['fl'],
734
+ destKey: 'intV',
735
+ metadata: {
736
+ type: ['toInt'],
737
+ },
738
+ },
739
+ {
740
+ sourceKeys: ['dob'],
741
+ destKey: 'mmdd',
742
+ metadata: {
743
+ type: ['dobInMMDD'],
744
+ },
745
+ },
746
+ {
747
+ sourceKeys: ['time'],
748
+ destKey: 'ts',
749
+ metadata: {
750
+ type: ['secondTimestamp'],
751
+ },
752
+ },
753
+ {
754
+ sourceKeys: ['time'],
755
+ destKey: 'mts',
756
+ metadata: {
757
+ type: ['microSecondTimestamp'],
758
+ },
759
+ },
760
+ ];
761
+ expect(json_1.JsonUtils.constructPayload(message, mappingJson)).toEqual({
762
+ trimmed: 'spaced string',
763
+ isbool: false,
764
+ isbool2: true,
765
+ Url: 'www.ggoole.com',
766
+ UrlV2: 'ggoole.com',
767
+ offset: -14400,
768
+ eoffset: undefined,
769
+ object: '{"a":1,"b":"ball"}',
770
+ flV: 12.8818,
771
+ intV: 12,
772
+ mmdd: '01/01',
773
+ ts: 1630461545,
774
+ mts: 1630461545000000,
775
+ });
776
+ });
777
+ it('should perform flatJson, jsonStringify, jsonStringifyOnFlatten, encodeURIComponent successfully', () => {
778
+ const message = {
779
+ obj: { a: 1, b: { w1: 'ball', w2: 'bat' } },
780
+ param: '?x=test?',
781
+ };
782
+ const mappingJson = [
783
+ {
784
+ sourceKeys: ['obj'],
785
+ destKey: 'object',
786
+ metadata: {
787
+ type: ['flatJson'],
788
+ },
789
+ },
790
+ {
791
+ sourceKeys: ['obj'],
792
+ destKey: 'sobj',
793
+ metadata: {
794
+ type: ['jsonStringify'],
795
+ },
796
+ },
797
+ {
798
+ sourceKeys: ['obj'],
799
+ destKey: 'sobjf',
800
+ metadata: {
801
+ type: ['jsonStringifyOnFlatten'],
802
+ },
803
+ },
804
+ {
805
+ sourceKeys: ['param'],
806
+ destKey: 'q',
807
+ metadata: {
808
+ type: ['encodeURIComponent'],
809
+ },
810
+ },
811
+ ];
812
+ expect(json_1.JsonUtils.constructPayload(message, mappingJson)).toEqual({
813
+ object: { a: 1, 'b.w1': 'ball', 'b.w2': 'bat' },
814
+ sobjf: '{"a":1,"b.w1":"ball","b.w2":"bat"}',
815
+ q: '%3Fx%3Dtest%3F',
816
+ sobj: '{"a":1,"b":{"w1":"ball","w2":"bat"}}',
817
+ });
818
+ });
819
+ it('should perform numberForRevenue successfully', () => {
820
+ const message = {
821
+ rev: '$124',
822
+ };
823
+ const mappingJson = [
824
+ {
825
+ sourceKeys: ['rev'],
826
+ destKey: 'revenue',
827
+ metadata: {
828
+ type: ['numberForRevenue'],
829
+ },
830
+ },
831
+ ];
832
+ expect(json_1.JsonUtils.constructPayload(message, mappingJson)).toEqual({
833
+ revenue: 124.0,
834
+ });
835
+ });
836
+ it('should throw when revenue is not sent as a number', () => {
837
+ const message = {
838
+ rev: '$12a',
839
+ };
840
+ const mappingJson = [
841
+ {
842
+ sourceKeys: ['rev'],
843
+ destKey: 'revenue',
844
+ metadata: {
845
+ type: ['numberForRevenue'],
846
+ },
847
+ },
848
+ ];
849
+ expect(() => {
850
+ json_1.JsonUtils.constructPayload(message, mappingJson);
851
+ }).toThrow('Revenue is not in the correct format');
852
+ });
853
+ it('should throw error when url is not correct while using domainUrlV2 formatting type', () => {
854
+ // @ts-expect-error: this is a mock
855
+ Date.now = jest.fn(() => new Date('2021-09-01T01:50:01.000Z'));
856
+ const message = {
857
+ url: 'gomim',
858
+ };
859
+ const mappingJson = [
860
+ {
861
+ sourceKeys: ['url'],
862
+ destKey: 'UrlV2',
863
+ metadata: {
864
+ type: ['domainUrlV2'],
865
+ },
866
+ },
867
+ ];
868
+ expect(() => {
869
+ json_1.JsonUtils.constructPayload(message, mappingJson);
870
+ }).toThrow('Invalid URL: gomim');
871
+ });
378
872
  });
379
873
  describe('construct payload edge cases', () => {
874
+ it('should map destKey with undefined when multiKeyMap is an object', () => {
875
+ const message = {
876
+ event: 'purchase',
877
+ properties: {
878
+ item: 'Mobile',
879
+ },
880
+ timeStamp: '2021-09-01T00:00:00.000Z',
881
+ };
882
+ const mappingJson = [
883
+ {
884
+ sourceKeys: ['properties.item'],
885
+ destKey: 'itemName',
886
+ metadata: { multikeyMap: {} },
887
+ },
888
+ ];
889
+ const expectedPayload = {
890
+ itemName: undefined,
891
+ };
892
+ const payload = json_1.JsonUtils.constructPayload(message, mappingJson);
893
+ expect(payload).toEqual(expectedPayload);
894
+ });
895
+ it('should throw error when multiKeyMap but strictMultiMap is present', () => {
896
+ const message = {
897
+ event: 'purchase',
898
+ properties: {
899
+ item: 'Mobile',
900
+ },
901
+ timeStamp: '2021-09-01T00:00:00.000Z',
902
+ };
903
+ const mappingJson = [
904
+ {
905
+ sourceKeys: ['properties.item'],
906
+ destKey: 'itemName',
907
+ metadata: {
908
+ strictMultiMap: {},
909
+ },
910
+ },
911
+ ];
912
+ expect(() => {
913
+ json_1.JsonUtils.constructPayload(message, mappingJson);
914
+ }).toThrow('Invalid entry for key itemName');
915
+ });
916
+ it('should throw error when multiKeyMap.sourceVal does not contain the sourceKey value', () => {
917
+ const message = {
918
+ event: 'purchase',
919
+ properties: {
920
+ item: 'Mobile',
921
+ },
922
+ timeStamp: '2021-09-01T00:00:00.000Z',
923
+ };
924
+ const mappingJson = [
925
+ {
926
+ sourceKeys: ['properties.item'],
927
+ destKey: 'itemName',
928
+ metadata: {
929
+ multikeyMap: [
930
+ {
931
+ sourceVal: ['f', 'F', 'Female', 'female'],
932
+ destVal: 'F',
933
+ },
934
+ ],
935
+ },
936
+ },
937
+ ];
938
+ expect(json_1.JsonUtils.constructPayload(message, mappingJson)).toEqual({
939
+ itemName: undefined,
940
+ });
941
+ });
942
+ it('should throw error when multiKeyMap.sourceVal is not array', () => {
943
+ const message = {
944
+ event: 'purchase',
945
+ properties: {
946
+ item: 'Mobile',
947
+ },
948
+ timeStamp: '2021-09-01T00:00:00.000Z',
949
+ };
950
+ const mappingJson = [
951
+ {
952
+ sourceKeys: ['properties.item'],
953
+ destKey: 'itemName',
954
+ metadata: {
955
+ multikeyMap: [
956
+ {
957
+ sourceVal: {},
958
+ destVal: 'F',
959
+ },
960
+ ],
961
+ },
962
+ },
963
+ ];
964
+ expect(json_1.JsonUtils.constructPayload(message, mappingJson)).toEqual({
965
+ itemName: 'Mobile',
966
+ });
967
+ });
380
968
  it('should return null when given an empty mappingJson', () => {
381
969
  const message = {
382
970
  event: 'purchase',
@@ -571,6 +1159,99 @@ describe('JSON utils', () => {
571
1159
  const value = json_1.JsonUtils.getFieldValueFromMessage(message, sourceKey);
572
1160
  expect(value).toEqual(expectedValue);
573
1161
  });
1162
+ it('should throw when sourceKeys is not string, object or Array', () => {
1163
+ expect(() => {
1164
+ // @ts-expect-error: for testing purposes
1165
+ json_1.JsonUtils.getValueFromMessage({}, 123);
1166
+ }).toThrow('Wrong sourceKey type or blank sourceKey array');
1167
+ });
1168
+ it('should perform addition operation while getting value from message', () => {
1169
+ const msg = {
1170
+ a: 12,
1171
+ c: 114,
1172
+ };
1173
+ const ops = {
1174
+ operation: 'addition',
1175
+ args: [
1176
+ {
1177
+ sourceKeys: ['a', 'b'],
1178
+ defaultVal: 0,
1179
+ },
1180
+ {
1181
+ sourceKeys: ['c.d'],
1182
+ defaultVal: -1,
1183
+ },
1184
+ ],
1185
+ };
1186
+ expect(json_1.JsonUtils.getValueFromMessage(msg, ops)).toEqual(11);
1187
+ });
1188
+ it('should return defaultVal for addition operation while getting value from message', () => {
1189
+ const msg = {
1190
+ 1: 1234,
1191
+ a: 12,
1192
+ c: 114,
1193
+ };
1194
+ const ops = {
1195
+ operation: 'addition',
1196
+ args: [
1197
+ {
1198
+ sourceKeys: 1,
1199
+ defaultVal: 0,
1200
+ },
1201
+ {
1202
+ sourceKeys: ['c.d'],
1203
+ defaultVal: -1,
1204
+ },
1205
+ ],
1206
+ };
1207
+ expect(json_1.JsonUtils.getValueFromMessage(msg, ops)).toEqual(-1);
1208
+ });
1209
+ it('should return null when no defaultValues are provided', () => {
1210
+ const msg = {
1211
+ a: 12,
1212
+ c: 114,
1213
+ };
1214
+ const ops = {
1215
+ operation: 'addition',
1216
+ args: [
1217
+ {
1218
+ sourceKeys: ['D', 'W'],
1219
+ defaultVal: 0,
1220
+ },
1221
+ {
1222
+ sourceKeys: ['c.d'],
1223
+ },
1224
+ ],
1225
+ };
1226
+ expect(json_1.JsonUtils.getValueFromMessage(msg, ops)).toEqual(null);
1227
+ });
1228
+ it('should return null when string defaultValues are provided', () => {
1229
+ const msg = {
1230
+ a: 12,
1231
+ c: 114,
1232
+ };
1233
+ const ops = {
1234
+ operation: 'multiplication',
1235
+ args: [
1236
+ {
1237
+ sourceKeys: ['D', 'W'],
1238
+ defaultVal: '0',
1239
+ },
1240
+ {
1241
+ sourceKeys: ['c.d'],
1242
+ defaultVal: '12',
1243
+ },
1244
+ ],
1245
+ };
1246
+ expect(json_1.JsonUtils.getValueFromMessage(msg, ops)).toEqual(null);
1247
+ ops.operation = 'addition';
1248
+ expect(json_1.JsonUtils.getValueFromMessage(msg, ops)).toEqual(null);
1249
+ ops.operation = 'randomOp';
1250
+ expect(json_1.JsonUtils.getValueFromMessage(msg, ops)).toEqual(null);
1251
+ });
1252
+ it('should stringify json', () => {
1253
+ expect(json_1.JsonUtils.stringify({ a: 1 })).toEqual(`{"a":1}`);
1254
+ });
574
1255
  it('should return null when given an invalid sourceKey', () => {
575
1256
  const message = {
576
1257
  event: 'purchase',
@@ -583,6 +1264,27 @@ describe('JSON utils', () => {
583
1264
  const value = json_1.JsonUtils.getFieldValueFromMessage(message, sourceKey);
584
1265
  expect(value).toBeNull();
585
1266
  });
1267
+ it('should return proper templated value', () => {
1268
+ const message = {
1269
+ event: 'purchase',
1270
+ properties: {
1271
+ revenue: 100,
1272
+ currency: 'USD',
1273
+ },
1274
+ };
1275
+ const mappingJson = [
1276
+ {
1277
+ sourceKeys: ['properties'],
1278
+ destKey: 'itemName',
1279
+ metadata: {
1280
+ template: '{{value.revenue}} {{value.currency}}',
1281
+ },
1282
+ },
1283
+ ];
1284
+ expect(json_1.JsonUtils.constructPayload(message, mappingJson)).toEqual({
1285
+ itemName: '100 USD',
1286
+ });
1287
+ });
586
1288
  });
587
1289
  });
588
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2pzb24udGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUFpRDtBQUNqRCxpQ0FBbUM7QUFFbkMsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7SUFDMUIsUUFBUSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtRQUM3QyxFQUFFLENBQUMseUdBQXlHLEVBQUUsR0FBRyxFQUFFO1lBQ2pILE1BQU0sT0FBTyxHQUFHO2dCQUNkLEtBQUssRUFBRSxVQUFVO2dCQUNqQixVQUFVLEVBQUU7b0JBQ1YsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLFdBQVcsRUFBRSxHQUFHO29CQUNoQixRQUFRLEVBQUU7d0JBQ1IsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTt3QkFDMUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtxQkFDM0M7aUJBQ0Y7YUFDRixDQUFDO1lBRUYsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCO29CQUNFLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQztvQkFDckIsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLFFBQVEsRUFBRSxJQUFJO29CQUNkLFFBQVEsRUFBRSxFQUFFO2lCQUNiO2dCQUNEO29CQUNFLFVBQVUsRUFBRSxDQUFDLG9CQUFvQixDQUFDO29CQUNsQyxPQUFPLEVBQUUsU0FBUztvQkFDbEIsUUFBUSxFQUFFLElBQUk7b0JBQ2QsUUFBUSxFQUFFLEVBQUU7aUJBQ2I7Z0JBQ0Q7b0JBQ0UsVUFBVSxFQUFFLENBQUMsd0JBQXdCLENBQUM7b0JBQ3RDLE9BQU8sRUFBRSxhQUFhO29CQUN0QixRQUFRLEVBQUUsSUFBSTtvQkFDZCxRQUFRLEVBQUUsRUFBRTtpQkFDYjtnQkFDRDtvQkFD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LE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsb0RBQW9ELEVBQUUsR0FBRyxFQUFFO1lBQzVELE1BQU0sT0FBTyxHQUFHO2dCQUNkLEtBQUssRUFBRSxVQUFVO2dCQUNqQixVQUFVLEVBQUU7b0JBQ1YsT0FBTyxFQUFFLEdBQUc7b0JBQ1osUUFBUSxFQUFFLEtBQUs7aUJBQ2hCO2FBQ0YsQ0FBQztZQUVGLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQztZQUUvQixNQUFNLEtBQUssR0FBRyxnQkFBUyxDQUFDLHdCQUF3QixDQUFDLE9BQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM1RSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5zdHJ1bWVudGF0aW9uRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuaW1wb3J0IHsgSnNvblV0aWxzIH0gZnJvbSAnLi9qc29uJztcblxuZGVzY3JpYmUoJ0pTT04gdXRpbHMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdjb25zdHJ1Y3QgcGF5bG9hZCBoYXBweSBwYXRocycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNvbnN0cnVjdCBwYXlsb2FkIHdpdGggdmFsaWQgbWFwcGluZyBKU09OIGFuZCBtZXNzYWdlIG9iamVjdCBjb250YWluaW5nIGFsbCByZXF1aXJlZCBzb3VyY2Uga2V5cycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgb3JkZXJJZDogJzEyMzQ1JyxcbiAgICAgICAgICB0b3RhbEFtb3VudDogMTAwLFxuICAgICAgICAgIHByb2R1Y3RzOiBbXG4gICAgICAgICAgICB7IGlkOiAncDEnLCBuYW1lOiAnUHJvZHVjdCAxJywgcHJpY2U6IDUwIH0sXG4gICAgICAgICAgICB7IGlkOiAncDInLCBuYW1lOiAnUHJvZHVjdCAyJywgcHJpY2U6IDUwIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1hcHBpbmdKc29uID0gW1xuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydldmVudCddLFxuICAgICAgICAgIGRlc3RLZXk6ICdldmVudCcsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydwcm9wZXJ0aWVzLm9yZGVySWQnXSxcbiAgICAgICAgICBkZXN0S2V5OiAnb3JkZXJJZCcsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydwcm9wZXJ0aWVzLnRvdGFsQW1vdW50J10sXG4gICAgICAgICAgZGVzdEtleTogJ3RvdGFsQW1vdW50JyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3Byb3BlcnRpZXMucHJvZHVjdHMnXSxcbiAgICAgICAgICBkZXN0S2V5OiAncHJvZHVjdHMnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGV4cGVjdGVkUGF5bG9hZCA9IHtcbiAgICAgICAgZXZlbnQ6ICdwdXJjaGFzZScsXG4gICAgICAgIG9yZGVySWQ6ICcxMjM0NScsXG4gICAgICAgIHRvdGFsQW1vdW50OiAxMDAsXG4gICAgICAgIHByb2R1Y3RzOiBbXG4gICAgICAgICAgeyBpZDogJ3AxJywgbmFtZTogJ1Byb2R1Y3QgMScsIHByaWNlOiA1MCB9LFxuICAgICAgICAgIHsgaWQ6ICdwMicsIG5hbWU6ICdQcm9kdWN0IDInLCBwcmljZTogNTAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKc29uVXRpbHMuY29uc3RydWN0UGF5bG9hZChtZXNzYWdlIGFzIGFueSwgbWFwcGluZ0pzb24pO1xuICAgICAgZXhwZWN0KHBheWxvYWQpLnRvRXF1YWwoZXhwZWN0ZWRQYXlsb2FkKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29uc3RydWN0IHBheWxvYWQgd2l0aCB2YWxpZCBtYXBwaW5nIEpTT04gYW5kIG1lc3NhZ2Ugb2JqZWN0IGNvbnRhaW5pbmcgc29tZSBvcHRpb25hbCBzb3VyY2Uga2V5cycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgb3JkZXJJZDogJzEyMzQ1JyxcbiAgICAgICAgICB0b3RhbEFtb3VudDogMTAwLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbWFwcGluZ0pzb24gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ2V2ZW50J10sXG4gICAgICAgICAgZGVzdEtleTogJ2V2ZW50JyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3Byb3BlcnRpZXMub3JkZXJJZCddLFxuICAgICAgICAgIGRlc3RLZXk6ICdvcmRlcklkJyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3Byb3BlcnRpZXMudG90YWxBbW91bnQnXSxcbiAgICAgICAgICBkZXN0S2V5OiAndG90YWxBbW91bnQnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsncHJvcGVydGllcy5wcm9kdWN0cyddLFxuICAgICAgICAgIGRlc3RLZXk6ICdwcm9kdWN0cycsXG4gICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGV4cGVjdGVkUGF5bG9hZCA9IHtcbiAgICAgICAgZXZlbnQ6ICdwdXJjaGFzZScsXG4gICAgICAgIG9yZGVySWQ6ICcxMjM0NScsXG4gICAgICAgIHRvdGFsQW1vdW50OiAxMDAsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0gSnNvblV0aWxzLmNvbnN0cnVjdFBheWxvYWQobWVzc2FnZSBhcyBhbnksIG1hcHBpbmdKc29uKTtcbiAgICAgIGV4cGVjdChwYXlsb2FkKS50b0VxdWFsKGV4cGVjdGVkUGF5bG9hZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnN0cnVjdCBwYXlsb2FkIHdpdGggdmFsaWQgbWFwcGluZyBKU09OIGFuZCBtZXNzYWdlIG9iamVjdCBjb250YWluaW5nIG5lc3RlZCBzb3VyY2Uga2V5cycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgb3JkZXI6IHtcbiAgICAgICAgICAgIGlkOiAnMTIzNDUnLFxuICAgICAgICAgICAgdG90YWxBbW91bnQ6IDEwMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbWFwcGluZ0pzb24gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ2V2ZW50J10sXG4gICAgICAgICAgZGVzdEtleTogJ2V2ZW50JyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3Byb3BlcnRpZXMub3JkZXIuaWQnXSxcbiAgICAgICAgICBkZXN0S2V5OiAnb3JkZXJJZCcsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydwcm9wZXJ0aWVzLm9yZGVyLnRvdGFsQW1vdW50J10sXG4gICAgICAgICAgZGVzdEtleTogJ3RvdGFsQW1vdW50JyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBleHBlY3RlZFBheWxvYWQgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBvcmRlcklkOiAnMTIzNDUnLFxuICAgICAgICB0b3RhbEFtb3VudDogMTAwLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IEpzb25VdGlscy5jb25zdHJ1Y3RQYXlsb2FkKG1lc3NhZ2UgYXMgYW55LCBtYXBwaW5nSnNvbik7XG4gICAgICBleHBlY3QocGF5bG9hZCkudG9FcXVhbChleHBlY3RlZFBheWxvYWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb25zdHJ1Y3QgcGF5bG9hZCB3aXRoIHZhbGlkIG1hcHBpbmcgSlNPTiBhbmQgbWVzc2FnZSBvYmplY3QgY29udGFpbmluZyBzb3VyY2Uga2V5cyB3aXRoIGRpZmZlcmVudCBkYXRhIHR5cGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgZXZlbnQ6ICdwdXJjaGFzZScsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBvcmRlcklkOiAxMjM0NSxcbiAgICAgICAgICB0b3RhbEFtb3VudDogJzEwMCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtYXBwaW5nSnNvbiA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsnZXZlbnQnXSxcbiAgICAgICAgICBkZXN0S2V5OiAnZXZlbnQnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsncHJvcGVydGllcy5vcmRlcklkJ10sXG4gICAgICAgICAgZGVzdEtleTogJ29yZGVySWQnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsncHJvcGVydGllcy50b3RhbEFtb3VudCddLFxuICAgICAgICAgIGRlc3RLZXk6ICd0b3RhbEFtb3VudCcsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgZXhwZWN0ZWRQYXlsb2FkID0ge1xuICAgICAgICBldmVudDogJ3B1cmNoYXNlJyxcbiAgICAgICAgb3JkZXJJZDogMTIzNDUsXG4gICAgICAgIHRvdGFsQW1vdW50OiAnMTAwJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKc29uVXRpbHMuY29uc3RydWN0UGF5bG9hZChtZXNzYWdlIGFzIGFueSwgbWFwcGluZ0pzb24pO1xuICAgICAgZXhwZWN0KHBheWxvYWQpLnRvRXF1YWwoZXhwZWN0ZWRQYXlsb2FkKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29uc3RydWN0IHBheWxvYWQgd2l0aCB2YWxpZCBtYXBwaW5nIEpTT04gYW5kIG1lc3NhZ2Ugb2JqZWN0IGNvbnRhaW5pbmcgc291cmNlIGtleXMgd2l0aCBhcnJheXMgb2YgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgZXZlbnQ6ICdwdXJjaGFzZScsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBwcm9kdWN0czogW1xuICAgICAgICAgICAgeyBpZDogJ3AxJywgbmFtZTogJ1Byb2R1Y3QgMScsIHByaWNlOiA1MCB9LFxuICAgICAgICAgICAgeyBpZDogJ3AyJywgbmFtZTogJ1Byb2R1Y3QgMicsIHByaWNlOiA1MCB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtYXBwaW5nSnNvbiA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsnZXZlbnQnXSxcbiAgICAgICAgICBkZXN0S2V5OiAnZXZlbnQnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsncHJvcGVydGllcy5wcm9kdWN0cyddLFxuICAgICAgICAgIGRlc3RLZXk6ICdwcm9kdWN0cycsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgZXhwZWN0ZWRQYXlsb2FkID0ge1xuICAgICAgICBldmVudDogJ3B1cmNoYXNlJyxcbiAgICAgICAgcHJvZHVjdHM6IFtcbiAgICAgICAgICB7IGlkOiAncDEnLCBuYW1lOiAnUHJvZHVjdCAxJywgcHJpY2U6IDUwIH0sXG4gICAgICAgICAgeyBpZDogJ3AyJywgbmFtZTogJ1Byb2R1Y3QgMicsIHByaWNlOiA1MCB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IEpzb25VdGlscy5jb25zdHJ1Y3RQYXlsb2FkKG1lc3NhZ2UgYXMgYW55LCBtYXBwaW5nSnNvbik7XG4gICAgICBleHBlY3QocGF5bG9hZCkudG9FcXVhbChleHBlY3RlZFBheWxvYWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb25zdHJ1Y3QgcGF5bG9hZCB3aXRoIHZhbGlkIG1hcHBpbmcgSlNPTiBhbmQgbWVzc2FnZSBvYmplY3QgY29udGFpbmluZyBzb3VyY2Uga2V5cyB3aXRoIGZvciBvcGVyYXRpb25zJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgZXZlbnQ6ICdwdXJjaGFzZScsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBvcmRlcklkOiAnMTIzNDUnLFxuICAgICAgICAgIHByaWNlOiAxMDAsXG4gICAgICAgICAgcXVhbnRpdHk6IDIsXG4gICAgICAgICAgYWRkb24xOiAxMCxcbiAgICAgICAgICBhZGRvbjI6IDIwLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbWFwcGluZ0pzb24gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ2V2ZW50J10sXG4gICAgICAgICAgZGVzdEtleTogJ2V2ZW50JyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3Byb3BlcnRpZXMub3JkZXJJZCddLFxuICAgICAgICAgIGRlc3RLZXk6ICdvcmRlcklkJyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb3BlcmF0aW9uOiAnbXVsdGlwbGljYXRpb24nLFxuICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc291cmNlS2V5czogJ3Byb3BlcnRpZXMucHJpY2UnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc291cmNlS2V5czogJ3Byb3BlcnRpZXMucXVhbnRpdHknLFxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGRlc3RLZXk6ICd0b3RhbEFtb3VudCcsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG9wZXJhdGlvbjogJ2FkZGl0aW9uJyxcbiAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHNvdXJjZUtleXM6ICdwcm9wZXJ0aWVzLmFkZG9uMScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzb3VyY2VLZXlzOiAncHJvcGVydGllcy5hZGRvbjInLFxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGRlc3RLZXk6ICd0b3RhbEFkZG9uJyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGV4cGVjdGVkUGF5bG9hZCA9IHtcbiAgICAgICAgZXZlbnQ6ICdwdXJjaGFzZScsXG4gICAgICAgIG9yZGVySWQ6ICcxMjM0NScsXG4gICAgICAgIHRvdGFsQW1vdW50OiAyMDAsXG4gICAgICAgIHRvdGFsQWRkb246IDMwLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IEpzb25VdGlscy5jb25zdHJ1Y3RQYXlsb2FkKG1lc3NhZ2UgYXMgYW55LCBtYXBwaW5nSnNvbik7XG4gICAgICBleHBlY3QocGF5bG9hZCkudG9FcXVhbChleHBlY3RlZFBheWxvYWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb25zdHJ1Y3QgcGF5bG9hZCB3aXRoIHZhbGlkIG1hcHBpbmcgSlNPTiBhbmQgbWVzc2FnZSBvYmplY3QgY29udGFpbmluZyBzb3VyY2Uga2V5cyB3aXRoIG1ldGFkYXRhIGNvbmZpZ3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBldmVudDogJ3B1cmNoYXNlJyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIG9yZGVySWQ6IDEyMzQ1LFxuICAgICAgICAgIHRvdGFsQW1vdW50OiAnMTAwJyxcbiAgICAgICAgICBpdGVtOiAnTW9iaWxlJyxcbiAgICAgICAgICBwcm9kdWN0czogW1xuICAgICAgICAgICAgeyBpZDogJ3AxJywgbmFtZTogJ1Byb2R1Y3QgMScsIHByaWNlOiA1MCB9LFxuICAgICAgICAgICAgeyBpZDogJ3AyJywgbmFtZTogJ1Byb2R1Y3QgMicsIHByaWNlOiA1MCB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgaW52ZW50b3J5OiB7XG4gICAgICAgICAgICBpdGVtMTogJ2l0ZW0xJyxcbiAgICAgICAgICAgIGl0ZW0yOiAnaXRlbTInLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHRpbWVTdGFtcDogJzIwMjEtMDktMDFUMDA6MDA6MDAuMDAwWicsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtYXBwaW5nSnNvbiA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsnZXZlbnQnXSxcbiAgICAgICAgICBkZXN0S2V5OiAnZXZlbnQnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiAndG9TdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3Byb3BlcnRpZXMub3JkZXJJZCddLFxuICAgICAgICAgIGRlc3RLZXk6ICdvcmRlcklkJyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdHlwZTogJ3RvU3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydwcm9wZXJ0aWVzLnRvdGFsQW1vdW50J10sXG4gICAgICAgICAgZGVzdEtleTogJ3RvdGFsQW1vdW50JyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdHlwZTogJ3RvTnVtYmVyJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydwcm9wZXJ0aWVzLnByb2R1Y3RzJ10sXG4gICAgICAgICAgZGVzdEtleTogJ3Byb2R1Y3RzJyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6ICd0aW1lU3RhbXAnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiAndGltZXN0YW1wJyxcbiAgICAgICAgICAgIHR5cGVGb3JtYXQ6ICd5eXl5LU1NLUREVEhIOm1tOnNzWlonLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGVzdEtleTogJ3RpbWVzdGFtcCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3JhbmRvbSddLFxuICAgICAgICAgIGRlc3RLZXk6ICdyYW5kb20nLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6ICdyYW5kb20nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3Byb3BlcnRpZXMuaW52ZW50b3J5J10sXG4gICAgICAgICAgZGVzdEtleTogJ2ludmVudG9yeScsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIGV4Y2x1ZGVzOiBbJ2l0ZW0yJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsncHJvcGVydGllcy5pdGVtJ10sXG4gICAgICAgICAgZGVzdEtleTogJ2l0ZW1OYW1lJyxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgbXVsdGlrZXlNYXA6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNvdXJjZVZhbDogWydNb2JpbGUnLCAnVGVsZXBob25lJ10sXG4gICAgICAgICAgICAgICAgZGVzdFZhbDogJ21vYicsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBleHBlY3RlZFBheWxvYWQgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBvcmRlcklkOiAnMTIzNDUnLFxuICAgICAgICB0b3RhbEFtb3VudDogMTAwLFxuICAgICAgICBwcm9kdWN0czogW1xuICAgICAgICAgIHsgaWQ6ICdwMScsIG5hbWU6ICdQcm9kdWN0IDEnLCBwcmljZTogNTAgfSxcbiAgICAgICAgICB7IGlkOiAncDInLCBuYW1lOiAnUHJvZHVjdCAyJywgcHJpY2U6IDUwIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGludmVudG9yeToge1xuICAgICAgICAgIGl0ZW0xOiAnaXRlbTEnLFxuICAgICAgICB9LFxuICAgICAgICBpdGVtTmFtZTogJ21vYicsXG4gICAgICAgIHJhbmRvbTogJ3JhbmRvbScsXG4gICAgICAgIHRpbWVzdGFtcDogJzIwMjEtMDktMDFUMDA6MDA6MDArMDAwMCcsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0gSnNvblV0aWxzLmNvbnN0cnVjdFBheWxvYWQobWVzc2FnZSBhcyBhbnksIG1hcHBpbmdKc29uKTtcbiAgICAgIGV4cGVjdChwYXlsb2FkKS50b0VxdWFsKGV4cGVjdGVkUGF5bG9hZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjb25zdHJ1Y3QgcGF5bG9hZCBlZGdlIGNhc2VzJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiBnaXZlbiBhbiBlbXB0eSBtYXBwaW5nSnNvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgcmV2ZW51ZTogMTAwLFxuICAgICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1hcHBpbmdKc29uID0gW107XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKc29uVXRpbHMuY29uc3RydWN0UGF5bG9hZChtZXNzYWdlIGFzIGFueSwgbWFwcGluZ0pzb24pO1xuICAgICAgZXhwZWN0KHBheWxvYWQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gZ2l2ZW4gYW4gaW52YWxpZCBzb3VyY2VLZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBldmVudDogJ3B1cmNoYXNlJyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHJldmVudWU6IDEwMCxcbiAgICAgICAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzb3VyY2VLZXkgPSAnaW52YWxpZEtleSc7XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gSnNvblV0aWxzLmdldEZpZWxkVmFsdWVGcm9tTWVzc2FnZShtZXNzYWdlIGFzIGFueSwgc291cmNlS2V5KTtcbiAgICAgIGV4cGVjdCh2YWx1ZSkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHdoZW4gbWV0YWRhdGEgaXMgaW52YWxpZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgcmV2ZW51ZTogMTAwLFxuICAgICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgICBwcm9kdWN0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnUHJvZHVjdCAxJyxcbiAgICAgICAgICAgICAgcHJpY2U6IDUwLFxuICAgICAgICAgICAgICBxdWFudGl0eTogMixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdQcm9kdWN0IDInLFxuICAgICAgICAgICAgICBwcmljZTogMzAsXG4gICAgICAgICAgICAgIHF1YW50aXR5OiAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbWFwcGluZ0pzb24gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiAncHJvcGVydGllcy5yZXZlbnVlJyxcbiAgICAgICAgICBkZXN0S2V5OiAncmV2ZW51ZScsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6ICdpbnZhbGlkVHlwZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gSnNvblV0aWxzLmNvbnN0cnVjdFBheWxvYWQobWVzc2FnZSBhcyBhbnksIG1hcHBpbmdKc29uKTtcblxuICAgICAgZXhwZWN0KHZhbHVlKS50b0VxdWFsKHtcbiAgICAgICAgcmV2ZW51ZTogMTAwLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIEluc3RydW1lbnRhdGlvbkVycm9yIHdoZW4gYSByZXF1aXJlZCB2YWx1ZSBpcyBtaXNzaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgZXZlbnQ6ICdwdXJjaGFzZScsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICByZXZlbnVlOiAxMDAsXG4gICAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgICAgIHByb2R1Y3RzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdQcm9kdWN0IDEnLFxuICAgICAgICAgICAgICBwcmljZTogNTAsXG4gICAgICAgICAgICAgIHF1YW50aXR5OiAyLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ1Byb2R1Y3QgMicsXG4gICAgICAgICAgICAgIHByaWNlOiAzMCxcbiAgICAgICAgICAgICAgcXVhbnRpdHk6IDEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtYXBwaW5nSnNvbiA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6ICdldmVudCcsXG4gICAgICAgICAgZGVzdEtleTogJ2V2ZW50JyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiAncHJvcGVydGllcy5yZXZlbnVlJyxcbiAgICAgICAgICBkZXN0S2V5OiAncmV2ZW51ZScsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogJ3Byb3BlcnRpZXMuY3VycmVuY3knLFxuICAgICAgICAgIGRlc3RLZXk6ICdjdXJyZW5jeScsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogJ3Byb3BlcnRpZXMucHJvZHVjdHMnLFxuICAgICAgICAgIGRlc3RLZXk6ICdwcm9kdWN0cycsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogJ3Byb3BlcnRpZXMuaW52YWxpZEtleScsXG4gICAgICAgICAgZGVzdEtleTogJ2ludmFsaWRLZXknLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIEpzb25VdGlscy5jb25zdHJ1Y3RQYXlsb2FkKG1lc3NhZ2UgYXMgYW55LCBtYXBwaW5nSnNvbik7XG4gICAgICB9KS50b1Rocm93KEluc3RydW1lbnRhdGlvbkVycm9yKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29uc3RydWN0IHRoZSBwYXlsb2FkIGNvcnJlY3RseSB3aXRoIGEgdmFsaWQgbWFwcGluZ0pzb24gYW5kIG1lc3NhZ2Ugb2JqZWN0IHdoZW4gZGVzdGluYXRpb24ga2V5IGlzIGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgcmV2ZW51ZTogMTAwLFxuICAgICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgICBwcm9kdWN0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnUHJvZHVjdCAxJyxcbiAgICAgICAgICAgICAgcHJpY2U6IDUwLFxuICAgICAgICAgICAgICBxdWFudGl0eTogMixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdQcm9kdWN0IDInLFxuICAgICAgICAgICAgICBwcmljZTogMzAsXG4gICAgICAgICAgICAgIHF1YW50aXR5OiAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbWFwcGluZ0pzb24gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiAnZXZlbnQnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6ICdwcm9wZXJ0aWVzLnJldmVudWUnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6ICdwcm9wZXJ0aWVzLmN1cnJlbmN5JyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiAncHJvcGVydGllcy5wcm9kdWN0cycsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgLy8gTm90IGEgY29ycmVjdCBwYXlsb2FkIGFzIHRoZSBkZXN0aW5hdGlvbiBrZXlzIGFyZSBlbXB0eSBzdHJpbmdzIG9yIG5vdCBwcmVzZW50XG4gICAgICBjb25zdCBleHBlY3RlZFBheWxvYWQgPSB7XG4gICAgICAgICcnOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ1Byb2R1Y3QgMScsXG4gICAgICAgICAgICBwcmljZTogNTAsXG4gICAgICAgICAgICBxdWFudGl0eTogMixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdQcm9kdWN0IDInLFxuICAgICAgICAgICAgcHJpY2U6IDMwLFxuICAgICAgICAgICAgcXVhbnRpdHk6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKc29uVXRpbHMuY29uc3RydWN0UGF5bG9hZChtZXNzYWdlIGFzIGFueSwgbWFwcGluZ0pzb24pO1xuICAgICAgZXhwZWN0KHBheWxvYWQpLnRvRXF1YWwoZXhwZWN0ZWRQYXlsb2FkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2pzb24gdXRpbCBvdGhlciBmdW5jdGlvbnMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXRyaWV2ZSB0aGUgZmllbGQgdmFsdWUgY29ycmVjdGx5IGZyb20gdGhlIG1lc3NhZ2UgdXNpbmcgYSB2YWxpZCBzb3VyY2VLZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBldmVudDogJ3B1cmNoYXNlJyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHJldmVudWU6IDEwMCxcbiAgICAgICAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgICAgIH0sXG4gICAgICAgIHRyYWl0czoge1xuICAgICAgICAgIGZpcnN0TmFtZTogJ0pvaG4nLFxuICAgICAgICAgIGxhc3ROYW1lOiAnRG9lJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNvdXJjZUtleSA9ICdmaXJzdE5hbWUnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZSA9ICdKb2huJztcblxuICAgICAgY29uc3QgdmFsdWUgPSBKc29uVXRpbHMuZ2V0RmllbGRWYWx1ZUZyb21NZXNzYWdlKG1lc3NhZ2UgYXMgYW55LCBzb3VyY2VLZXkpO1xuICAgICAgZXhwZWN0KHZhbHVlKS50b0VxdWFsKGV4cGVjdGVkVmFsdWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIGdpdmVuIGFuIGludmFsaWQgc291cmNlS2V5JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgZXZlbnQ6ICdwdXJjaGFzZScsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICByZXZlbnVlOiAxMDAsXG4gICAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgc291cmNlS2V5ID0gJ2ludmFsaWRLZXknO1xuXG4gICAgICBjb25zdCB2YWx1ZSA9IEpzb25VdGlscy5nZXRGaWVsZFZhbHVlRnJvbU1lc3NhZ2UobWVzc2FnZSBhcyBhbnksIHNvdXJjZUtleSk7XG4gICAgICBleHBlY3QodmFsdWUpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
1290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2pzb24udGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUFpRDtBQUNqRCxpQ0FBbUM7QUFFbkMsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7SUFDMUIsUUFBUSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtRQUM3QyxFQUFFLENBQUMseUdBQXlHLEVBQUUsR0FBRyxFQUFFO1lBQ2pILE1BQU0sT0FBTyxHQUFHO2dCQUNkLEtBQUssRUFBRSxVQUFVO2dCQUNqQixVQUFVLEVBQUU7b0JBQ1YsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLFdBQVcsRUFBRSxHQUFHO29CQUNoQixRQUFRLEVBQUU7d0JBQ1IsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTt3QkFDMUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtxQkFDM0M7aUJBQ0Y7YUFDRixDQUFDO1lBRUYsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCO29CQUNFLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQztvQkFDckIsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLFFBQVEsRUFBRSxJQUFJO29CQUNkLFFBQVEsRUFBRSxFQUFFO2lCQUNiO2dCQUNEO29CQUNFLFVBQVUsRUFBRSxDQUFDLG9CQUFvQixDQUFDO29CQUNsQyxPQUFPLEVBQUUsU0FBUztvQkFDbEIsUUFBUSxFQUFFLElBQUk7b0JBQ2QsUUFBUSxFQUFFLEVBQUU7aUJBQ2I7Z0JBQ0Q7b0JBQ0UsVUFBVSxFQUFFLENBQUMsd0JBQXdCLENBQUM7b0JBQ3RDLE9BQU8sRUFBRSxhQUFhO29CQUN0QixRQUFRLEVBQUUsSUFBSTtvQkFDZCxRQUFRLEVBQUUsRUFBRTtpQkFDYjtnQkFDRDtvQkFD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QUFXLEdBQUc7Z0JBQ2xCO29CQUNFLFVBQVUsRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDMUIsT0FBTyxFQUFFLFVBQVU7b0JBQ25CLFFBQVEsRUFBRTt3QkFDUixRQUFRLEVBQUUsc0NBQXNDO3FCQUNqRDtpQkFDRjthQUNGLENBQUM7WUFDRixNQUFNLENBQUMsZ0JBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFjLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ3RFLFFBQVEsRUFBRSxTQUFTO2FBQ3BCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluc3RydW1lbnRhdGlvbkVycm9yIH0gZnJvbSAnLi4vZXJyb3JzJztcbmltcG9ydCB7IEpzb25VdGlscyB9IGZyb20gJy4vanNvbic7XG5cbmRlc2NyaWJlKCdKU09OIHV0aWxzJywgKCkgPT4ge1xuICBkZXNjcmliZSgnY29uc3RydWN0IHBheWxvYWQgaGFwcHkgcGF0aHMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjb25zdHJ1Y3QgcGF5bG9hZCB3aXRoIHZhbGlkIG1hcHBpbmcgSlNPTiBhbmQgbWVzc2FnZSBvYmplY3QgY29udGFpbmluZyBhbGwgcmVxdWlyZWQgc291cmNlIGtleXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBldmVudDogJ3B1cmNoYXNlJyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIG9yZGVySWQ6ICcxMjM0NScsXG4gICAgICAgICAgdG90YWxBbW91bnQ6IDEwMCxcbiAgICAgICAgICBwcm9kdWN0czogW1xuICAgICAgICAgICAgeyBpZDogJ3AxJywgbmFtZTogJ1Byb2R1Y3QgMScsIHByaWNlOiA1MCB9LFxuICAgICAgICAgICAgeyBpZDogJ3AyJywgbmFtZTogJ1Byb2R1Y3QgMicsIHByaWNlOiA1MCB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtYXBwaW5nSnNvbiA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsnZXZlbnQnXSxcbiAgICAgICAgICBkZXN0S2V5OiAnZXZlbnQnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsncHJvcGVydGllcy5vcmRlcklkJ10sXG4gICAgICAgICAgZGVzdEtleTogJ29yZGVySWQnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsncHJvcGVydGllcy50b3RhbEFtb3VudCddLFxuICAgICAgICAgIGRlc3RLZXk6ICd0b3RhbEFtb3VudCcsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydwcm9wZXJ0aWVzLnByb2R1Y3RzJ10sXG4gICAgICAgICAgZGVzdEtleTogJ3Byb2R1Y3RzJyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBleHBlY3RlZFBheWxvYWQgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBvcmRlcklkOiAnMTIzNDUnLFxuICAgICAgICB0b3RhbEFtb3VudDogMTAwLFxuICAgICAgICBwcm9kdWN0czogW1xuICAgICAgICAgIHsgaWQ6ICdwMScsIG5hbWU6ICdQcm9kdWN0IDEnLCBwcmljZTogNTAgfSxcbiAgICAgICAgICB7IGlkOiAncDInLCBuYW1lOiAnUHJvZHVjdCAyJywgcHJpY2U6IDUwIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0gSnNvblV0aWxzLmNvbnN0cnVjdFBheWxvYWQobWVzc2FnZSBhcyBhbnksIG1hcHBpbmdKc29uKTtcbiAgICAgIGV4cGVjdChwYXlsb2FkKS50b0VxdWFsKGV4cGVjdGVkUGF5bG9hZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnN0cnVjdCBwYXlsb2FkIHdpdGggdmFsaWQgbWFwcGluZyBKU09OIGFuZCBtZXNzYWdlIG9iamVjdCBjb250YWluaW5nIHNvbWUgb3B0aW9uYWwgc291cmNlIGtleXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBldmVudDogJ3B1cmNoYXNlJyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIG9yZGVySWQ6ICcxMjM0NScsXG4gICAgICAgICAgdG90YWxBbW91bnQ6IDEwMCxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1hcHBpbmdKc29uID0gW1xuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydldmVudCddLFxuICAgICAgICAgIGRlc3RLZXk6ICdldmVudCcsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydwcm9wZXJ0aWVzLm9yZGVySWQnXSxcbiAgICAgICAgICBkZXN0S2V5OiAnb3JkZXJJZCcsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydwcm9wZXJ0aWVzLnRvdGFsQW1vdW50J10sXG4gICAgICAgICAgZGVzdEtleTogJ3RvdGFsQW1vdW50JyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3Byb3BlcnRpZXMucHJvZHVjdHMnXSxcbiAgICAgICAgICBkZXN0S2V5OiAncHJvZHVjdHMnLFxuICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBleHBlY3RlZFBheWxvYWQgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBvcmRlcklkOiAnMTIzNDUnLFxuICAgICAgICB0b3RhbEFtb3VudDogMTAwLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IEpzb25VdGlscy5jb25zdHJ1Y3RQYXlsb2FkKG1lc3NhZ2UgYXMgYW55LCBtYXBwaW5nSnNvbik7XG4gICAgICBleHBlY3QocGF5bG9hZCkudG9FcXVhbChleHBlY3RlZFBheWxvYWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb25zdHJ1Y3QgcGF5bG9hZCB3aXRoIHZhbGlkIG1hcHBpbmcgSlNPTiBhbmQgbWVzc2FnZSBvYmplY3QgY29udGFpbmluZyBuZXN0ZWQgc291cmNlIGtleXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBldmVudDogJ3B1cmNoYXNlJyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIG9yZGVyOiB7XG4gICAgICAgICAgICBpZDogJzEyMzQ1JyxcbiAgICAgICAgICAgIHRvdGFsQW1vdW50OiAxMDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1hcHBpbmdKc29uID0gW1xuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydldmVudCddLFxuICAgICAgICAgIGRlc3RLZXk6ICdldmVudCcsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydwcm9wZXJ0aWVzLm9yZGVyLmlkJ10sXG4gICAgICAgICAgZGVzdEtleTogJ29yZGVySWQnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsncHJvcGVydGllcy5vcmRlci50b3RhbEFtb3VudCddLFxuICAgICAgICAgIGRlc3RLZXk6ICd0b3RhbEFtb3VudCcsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgZXhwZWN0ZWRQYXlsb2FkID0ge1xuICAgICAgICBldmVudDogJ3B1cmNoYXNlJyxcbiAgICAgICAgb3JkZXJJZDogJzEyMzQ1JyxcbiAgICAgICAgdG90YWxBbW91bnQ6IDEwMCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKc29uVXRpbHMuY29uc3RydWN0UGF5bG9hZChtZXNzYWdlIGFzIGFueSwgbWFwcGluZ0pzb24pO1xuICAgICAgZXhwZWN0KHBheWxvYWQpLnRvRXF1YWwoZXhwZWN0ZWRQYXlsb2FkKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29uc3RydWN0IHBheWxvYWQgd2l0aCB2YWxpZCBtYXBwaW5nIEpTT04gYW5kIG1lc3NhZ2Ugb2JqZWN0IGNvbnRhaW5pbmcgc291cmNlIGtleXMgd2l0aCBkaWZmZXJlbnQgZGF0YSB0eXBlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgb3JkZXJJZDogMTIzNDUsXG4gICAgICAgICAgdG90YWxBbW91bnQ6ICcxMDAnLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbWFwcGluZ0pzb24gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ2V2ZW50J10sXG4gICAgICAgICAgZGVzdEtleTogJ2V2ZW50JyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3Byb3BlcnRpZXMub3JkZXJJZCddLFxuICAgICAgICAgIGRlc3RLZXk6ICdvcmRlcklkJyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3Byb3BlcnRpZXMudG90YWxBbW91bnQnXSxcbiAgICAgICAgICBkZXN0S2V5OiAndG90YWxBbW91bnQnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGV4cGVjdGVkUGF5bG9hZCA9IHtcbiAgICAgICAgZXZlbnQ6ICdwdXJjaGFzZScsXG4gICAgICAgIG9yZGVySWQ6IDEyMzQ1LFxuICAgICAgICB0b3RhbEFtb3VudDogJzEwMCcsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0gSnNvblV0aWxzLmNvbnN0cnVjdFBheWxvYWQobWVzc2FnZSBhcyBhbnksIG1hcHBpbmdKc29uKTtcbiAgICAgIGV4cGVjdChwYXlsb2FkKS50b0VxdWFsKGV4cGVjdGVkUGF5bG9hZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnN0cnVjdCBwYXlsb2FkIHdpdGggdmFsaWQgbWFwcGluZyBKU09OIGFuZCBtZXNzYWdlIG9iamVjdCBjb250YWluaW5nIHNvdXJjZSBrZXlzIHdpdGggYXJyYXlzIG9mIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgcHJvZHVjdHM6IFtcbiAgICAgICAgICAgIHsgaWQ6ICdwMScsIG5hbWU6ICdQcm9kdWN0IDEnLCBwcmljZTogNTAgfSxcbiAgICAgICAgICAgIHsgaWQ6ICdwMicsIG5hbWU6ICdQcm9kdWN0IDInLCBwcmljZTogNTAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbWFwcGluZ0pzb24gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ2V2ZW50J10sXG4gICAgICAgICAgZGVzdEtleTogJ2V2ZW50JyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3Byb3BlcnRpZXMucHJvZHVjdHMnXSxcbiAgICAgICAgICBkZXN0S2V5OiAncHJvZHVjdHMnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGV4cGVjdGVkUGF5bG9hZCA9IHtcbiAgICAgICAgZXZlbnQ6ICdwdXJjaGFzZScsXG4gICAgICAgIHByb2R1Y3RzOiBbXG4gICAgICAgICAgeyBpZDogJ3AxJywgbmFtZTogJ1Byb2R1Y3QgMScsIHByaWNlOiA1MCB9LFxuICAgICAgICAgIHsgaWQ6ICdwMicsIG5hbWU6ICdQcm9kdWN0IDInLCBwcmljZTogNTAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKc29uVXRpbHMuY29uc3RydWN0UGF5bG9hZChtZXNzYWdlIGFzIGFueSwgbWFwcGluZ0pzb24pO1xuICAgICAgZXhwZWN0KHBheWxvYWQpLnRvRXF1YWwoZXhwZWN0ZWRQYXlsb2FkKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29uc3RydWN0IHBheWxvYWQgd2l0aCB2YWxpZCBtYXBwaW5nIEpTT04gYW5kIG1lc3NhZ2Ugb2JqZWN0IGNvbnRhaW5pbmcgc291cmNlIGtleXMgd2l0aCBmb3Igb3BlcmF0aW9ucycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgb3JkZXJJZDogJzEyMzQ1JyxcbiAgICAgICAgICBwcmljZTogMTAwLFxuICAgICAgICAgIHF1YW50aXR5OiAyLFxuICAgICAgICAgIGFkZG9uMTogMTAsXG4gICAgICAgICAgYWRkb24yOiAyMCxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1hcHBpbmdKc29uID0gW1xuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydldmVudCddLFxuICAgICAgICAgIGRlc3RLZXk6ICdldmVudCcsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydwcm9wZXJ0aWVzLm9yZGVySWQnXSxcbiAgICAgICAgICBkZXN0S2V5OiAnb3JkZXJJZCcsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG9wZXJhdGlvbjogJ211bHRpcGxpY2F0aW9uJyxcbiAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHNvdXJjZUtleXM6ICdwcm9wZXJ0aWVzLnByaWNlJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHNvdXJjZUtleXM6ICdwcm9wZXJ0aWVzLnF1YW50aXR5JyxcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkZXN0S2V5OiAndG90YWxBbW91bnQnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvcGVyYXRpb246ICdhZGRpdGlvbicsXG4gICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzb3VyY2VLZXlzOiAncHJvcGVydGllcy5hZGRvbjEnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc291cmNlS2V5czogJ3Byb3BlcnRpZXMuYWRkb24yJyxcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkZXN0S2V5OiAndG90YWxBZGRvbicsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBleHBlY3RlZFBheWxvYWQgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBvcmRlcklkOiAnMTIzNDUnLFxuICAgICAgICB0b3RhbEFtb3VudDogMjAwLFxuICAgICAgICB0b3RhbEFkZG9uOiAzMCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKc29uVXRpbHMuY29uc3RydWN0UGF5bG9hZChtZXNzYWdlIGFzIGFueSwgbWFwcGluZ0pzb24pO1xuICAgICAgZXhwZWN0KHBheWxvYWQpLnRvRXF1YWwoZXhwZWN0ZWRQYXlsb2FkKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29uc3RydWN0IHBheWxvYWQgd2l0aCB2YWxpZCBtYXBwaW5nIEpTT04gYW5kIG1lc3NhZ2Ugb2JqZWN0IGNvbnRhaW5pbmcgc291cmNlIGtleXMgd2l0aCBtZXRhZGF0YSBjb25maWdzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgZXZlbnQ6ICdwdXJjaGFzZScsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBvcmRlcklkOiAxMjM0NSxcbiAgICAgICAgICB0b3RhbEFtb3VudDogJzEwMCcsXG4gICAgICAgICAgaXRlbTogJ01vYmlsZScsXG4gICAgICAgICAgcHJvZHVjdHM6IFtcbiAgICAgICAgICAgIHsgaWQ6ICdwMScsIG5hbWU6ICdQcm9kdWN0IDEnLCBwcmljZTogNTAgfSxcbiAgICAgICAgICAgIHsgaWQ6ICdwMicsIG5hbWU6ICdQcm9kdWN0IDInLCBwcmljZTogNTAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGludmVudG9yeToge1xuICAgICAgICAgICAgaXRlbTE6ICdpdGVtMScsXG4gICAgICAgICAgICBpdGVtMjogJ2l0ZW0yJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB0aW1lU3RhbXA6ICcyMDIxLTA5LTAxVDAwOjAwOjAwLjAwMFonLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbWFwcGluZ0pzb24gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ2V2ZW50J10sXG4gICAgICAgICAgZGVzdEtleTogJ2V2ZW50JyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdHlwZTogJ3RvU3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydwcm9wZXJ0aWVzLm9yZGVySWQnXSxcbiAgICAgICAgICBkZXN0S2V5OiAnb3JkZXJJZCcsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0b1N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsncHJvcGVydGllcy50b3RhbEFtb3VudCddLFxuICAgICAgICAgIGRlc3RLZXk6ICd0b3RhbEFtb3VudCcsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0b051bWJlcicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsncHJvcGVydGllcy5wcm9kdWN0cyddLFxuICAgICAgICAgIGRlc3RLZXk6ICdwcm9kdWN0cycsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiAndGltZVN0YW1wJyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdHlwZTogJ3RpbWVzdGFtcCcsXG4gICAgICAgICAgICB0eXBlRm9ybWF0OiAneXl5eS1NTS1ERFRISDptbTpzc1paJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlc3RLZXk6ICd0aW1lc3RhbXAnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydyYW5kb20nXSxcbiAgICAgICAgICBkZXN0S2V5OiAncmFuZG9tJyxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiAncmFuZG9tJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydwcm9wZXJ0aWVzLmludmVudG9yeSddLFxuICAgICAgICAgIGRlc3RLZXk6ICdpbnZlbnRvcnknLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICBleGNsdWRlczogWydpdGVtMiddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHdhcm5pbmcgbG9nXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3Byb3BlcnRpZXMub3JkZXJJZCddLFxuICAgICAgICAgIGRlc3RLZXk6ICdpbnZlbnRvcnkyJyxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgZXhjbHVkZXM6IFsnaXRlbTInXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydwcm9wZXJ0aWVzLml0ZW0nXSxcbiAgICAgICAgICBkZXN0S2V5OiAnaXRlbU5hbWUnLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICBtdWx0aWtleU1hcDogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc291cmNlVmFsOiBbJ01vYmlsZScsICdUZWxlcGhvbmUnXSxcbiAgICAgICAgICAgICAgICBkZXN0VmFsOiAnbW9iJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGV4cGVjdGVkUGF5bG9hZCA9IHtcbiAgICAgICAgZXZlbnQ6ICdwdXJjaGFzZScsXG4gICAgICAgIG9yZGVySWQ6ICcxMjM0NScsXG4gICAgICAgIHRvdGFsQW1vdW50OiAxMDAsXG4gICAgICAgIHByb2R1Y3RzOiBbXG4gICAgICAgICAgeyBpZDogJ3AxJywgbmFtZTogJ1Byb2R1Y3QgMScsIHByaWNlOiA1MCB9LFxuICAgICAgICAgIHsgaWQ6ICdwMicsIG5hbWU6ICdQcm9kdWN0IDInLCBwcmljZTogNTAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgaW52ZW50b3J5OiB7XG4gICAgICAgICAgaXRlbTE6ICdpdGVtMScsXG4gICAgICAgIH0sXG4gICAgICAgIGludmVudG9yeTI6IDEyMzQ1LFxuICAgICAgICBpdGVtTmFtZTogJ21vYicsXG4gICAgICAgIHJhbmRvbTogJ3JhbmRvbScsXG4gICAgICAgIHRpbWVzdGFtcDogJzIwMjEtMDktMDFUMDA6MDA6MDArMDAwMCcsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0gSnNvblV0aWxzLmNvbnN0cnVjdFBheWxvYWQobWVzc2FnZSBhcyBhbnksIG1hcHBpbmdKc29uKTtcbiAgICAgIGV4cGVjdChwYXlsb2FkKS50b0VxdWFsKGV4cGVjdGVkUGF5bG9hZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBwcm9wZXIgdmFsdWUgd2hlbiBhbGxvd2VkS2V5Q2hlY2sgY29udGFpbnMgdGhlIHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgZXZlbnQ6ICdwdXJjaGFzZScsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBpdGVtOiAnTW9iaWxlJyxcbiAgICAgICAgfSxcbiAgICAgICAgdGltZVN0YW1wOiAnMjAyMS0wOS0wMVQwMDowMDowMC4wMDBaJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1hcHBpbmdKc29uID0gW1xuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydwcm9wZXJ0aWVzLml0ZW0nXSxcbiAgICAgICAgICBkZXN0S2V5OiAnaXRlbU5hbWUnLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICBhbGxvd2VkS2V5Q2hlY2s6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNvdXJjZVZhbDogWydNb2JpbGUnLCAnVGVsZXBob25lJ10sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBleHBlY3RlZFBheWxvYWQgPSB7XG4gICAgICAgIGl0ZW1OYW1lOiAnTW9iaWxlJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKc29uVXRpbHMuY29uc3RydWN0UGF5bG9hZChtZXNzYWdlIGFzIGFueSwgbWFwcGluZ0pzb24pO1xuICAgICAgZXhwZWN0KHBheWxvYWQpLnRvRXF1YWwoZXhwZWN0ZWRQYXlsb2FkKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgd2hlbiBhbGxvd2VkS2V5Q2hlY2sgZG9lcyBub3QgY29udGFpbnMgdGhlIHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgZXZlbnQ6ICdwdXJjaGFzZScsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBpdGVtOiAnTW9iaWxlJyxcbiAgICAgICAgfSxcbiAgICAgICAgdGltZVN0YW1wOiAnMjAyMS0wOS0wMVQwMDowMDowMC4wMDBaJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1hcHBpbmdKc29uID0gW1xuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydwcm9wZXJ0aWVzLml0ZW0nXSxcbiAgICAgICAgICBkZXN0S2V5OiAnaXRlbU5hbWUnLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICBhbGxvd2VkS2V5Q2hlY2s6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNvdXJjZVZhbDogWydEdW0nLCAnVGVsZXBob25lJ10sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBleHBlY3RlZFBheWxvYWQgPSB7XG4gICAgICAgIGl0ZW1OYW1lOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0gSnNvblV0aWxzLmNvbnN0cnVjdFBheWxvYWQobWVzc2FnZSBhcyBhbnksIG1hcHBpbmdKc29uKTtcbiAgICAgIGV4cGVjdChwYXlsb2FkKS50b0VxdWFsKGV4cGVjdGVkUGF5bG9hZCk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbG93ZXJjYXNlZCB2YWx1ZSB3aGVuIGFsbG93ZWRLZXlDaGVjayBkb2VzIG5vdCBjb250YWlucyB0aGUgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBldmVudDogJ3B1cmNoYXNlJyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGl0ZW06ICdNb2JpbGUnLFxuICAgICAgICB9LFxuICAgICAgICB0aW1lU3RhbXA6ICcyMDIxLTA5LTAxVDAwOjAwOjAwLjAwMFonLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbWFwcGluZ0pzb24gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3Byb3BlcnRpZXMuaXRlbSddLFxuICAgICAgICAgIGRlc3RLZXk6ICdpdGVtTmFtZScsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIGFsbG93ZWRLZXlDaGVjazogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc291cmNlVmFsOiBbJ21vYmlsZScsICd0ZWxlcGhvbmUnXSxcbiAgICAgICAgICAgICAgICB0eXBlOiAndG9Mb3dlckNhc2UnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgZXhwZWN0ZWRQYXlsb2FkID0ge1xuICAgICAgICBpdGVtTmFtZTogJ21vYmlsZScsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0gSnNvblV0aWxzLmNvbnN0cnVjdFBheWxvYWQobWVzc2FnZSBhcyBhbnksIG1hcHBpbmdKc29uKTtcbiAgICAgIGV4cGVjdChwYXlsb2FkKS50b0VxdWFsKGV4cGVjdGVkUGF5bG9hZCk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdXBwZXJjYXNlZCB2YWx1ZSB3aGVuIGFsbG93ZWRLZXlDaGVjayBkb2VzIG5vdCBjb250YWlucyB0aGUgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBldmVudDogJ3B1cmNoYXNlJyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGl0ZW06ICdNb2JpbGUnLFxuICAgICAgICB9LFxuICAgICAgICB0aW1lU3RhbXA6ICcyMDIxLTA5LTAxVDAwOjAwOjAwLjAwMFonLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbWFwcGluZ0pzb24gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3Byb3BlcnRpZXMuaXRlbSddLFxuICAgICAgICAgIGRlc3RLZXk6ICdpdGVtTmFtZScsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIGFsbG93ZWRLZXlDaGVjazogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc291cmNlVmFsOiBbJ01PQklMRScsICdURUwnXSxcbiAgICAgICAgICAgICAgICB0eXBlOiAndG9VcHBlckNhc2UnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgZXhwZWN0ZWRQYXlsb2FkID0ge1xuICAgICAgICBpdGVtTmFtZTogJ01PQklMRScsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0gSnNvblV0aWxzLmNvbnN0cnVjdFBheWxvYWQobWVzc2FnZSBhcyBhbnksIG1hcHBpbmdKc29uKTtcbiAgICAgIGV4cGVjdChwYXlsb2FkKS50b0VxdWFsKGV4cGVjdGVkUGF5bG9hZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBjb3JyZWN0bHkgdmFsaWRhdGVkIHRpbWVzdGFtcCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiB0aGlzIGlzIGEgbW9ja1xuICAgICAgRGF0ZS5ub3cgPSBqZXN0LmZuKCgpID0+IG5ldyBEYXRlKCcyMDIxLTA5LTAxVDAyOjAwOjAxLjAwMFonKSk7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICB0aW1lU3RhbXAxOiAxNjMwNDYxNjAwMDAwLCAvLyAnMjAyMS0wOS0wMVQwMjowMDowMC4wMDBaJyxcbiAgICAgICAgdGltZVN0YW1wMjogMTYzMDQ2MTU0MjAwMCwgLy8gJzIwMjEtMDktMDFUMDE6NTk6MDIuMDAwWicsXG4gICAgICAgIHRpbWVTdGFtcDM6IDE2MzA0NjUxNDAwMDAsIC8vICcyMDIxLTA5LTAxVDAyOjU5OjAwLjAwMFonLFxuICAgICAgICB0aW1lU3RhbXA0OiAxNjMwNDY1MTQwMDAwLCAvLyAnMjAyMS0wOS0wMVQwMjo1OTowMC4wMDBaJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1hcHBpbmdKc29uID0gW1xuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWyd0aW1lU3RhbXAxJ10sXG4gICAgICAgICAgZGVzdEtleTogJ3RpbWUxJyxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdmFsaWRhdGVUaW1lc3RhbXA6IHtcbiAgICAgICAgICAgICAgYWxsb3dlZEZ1dHVyZVRpbWVEaWZmZXJlbmNlOiAxLFxuICAgICAgICAgICAgICBhbGxvd2VkRnV0dXJlVGltZVVuaXQ6ICdzZWNvbmRzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsndGltZVN0YW1wMiddLFxuICAgICAgICAgIGRlc3RLZXk6ICd0aW1lMicsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHZhbGlkYXRlVGltZXN0YW1wOiB7XG4gICAgICAgICAgICAgIGFsbG93ZWRQYXN0VGltZURpZmZlcmVuY2U6IDEsXG4gICAgICAgICAgICAgIGFsbG93ZWRQYXN0VGltZVVuaXQ6ICdtaW51dGVzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsndGltZVN0YW1wMyddLFxuICAgICAgICAgIGRlc3RLZXk6ICd0aW1lMycsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHZhbGlkYXRlVGltZXN0YW1wOiB7XG4gICAgICAgICAgICAgIGFsbG93ZWRGdXR1cmVUaW1lRGlmZmVyZW5jZTogMSxcbiAgICAgICAgICAgICAgYWxsb3dlZEZ1dHVyZVRpbWVVbml0OiAnaG91cnMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWyd0aW1lU3RhbXAyJ10sXG4gICAgICAgICAgZGVzdEtleTogJ3RpbWU0JyxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdmFsaWRhdGVUaW1lc3RhbXA6IHtcbiAgICAgICAgICAgICAgYWxsb3dlZFBhc3RUaW1lRGlmZmVyZW5jZTogNzUsXG4gICAgICAgICAgICAgIGFsbG93ZWRQYXN0VGltZVVuaXQ6ICdzZWNvbmRzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsndGltZVN0YW1wMiddLFxuICAgICAgICAgIGRlc3RLZXk6ICd0aW1lNScsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHZhbGlkYXRlVGltZXN0YW1wOiB7XG4gICAgICAgICAgICAgIGFsbG93ZWRQYXN0VGltZURpZmZlcmVuY2U6IDEsXG4gICAgICAgICAgICAgIGFsbG93ZWRQYXN0VGltZVVuaXQ6ICdob3VycycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3RpbWVTdGFtcDQnXSxcbiAgICAgICAgICBkZXN0S2V5OiAndGltZTYnLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB2YWxpZGF0ZVRpbWVzdGFtcDoge1xuICAgICAgICAgICAgICBhbGxvd2VkRnV0dXJlVGltZURpZmZlcmVuY2U6IDEsXG4gICAgICAgICAgICAgIGFsbG93ZWRGdXR1cmVUaW1lVW5pdDogJ2RheXMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWyd0aW1lU3RhbXAyJ10sXG4gICAgICAgICAgZGVzdEtleTogJ3RpbWU3JyxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdmFsaWRhdGVUaW1lc3RhbXA6IHtcbiAgICAgICAgICAgICAgYWxsb3dlZFBhc3RUaW1lRGlmZmVyZW5jZTogMSxcbiAgICAgICAgICAgICAgYWxsb3dlZFBhc3RUaW1lVW5pdDogJ2RheXMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgZXhwZWN0ZWRQYXlsb2FkID0ge1xuICAgICAgICB0aW1lMTogMTYzMDQ2MTYwMDAwMCwgLy8gJzIwMjEtMDktMDFUMDI6MDA6MDAuMDAwWicsXG4gICAgICAgIHRpbWUyOiAxNjMwNDYxNTQyMDAwLCAvLyAnMjAyMS0wOS0wMVQwMTo1OTowMi4wMDBaJyxcbiAgICAgICAgdGltZTQ6IDE2MzA0NjE1NDIwMDAsIC8vICcyMDIxLTA5LTAxVDAxOjU5OjAyLjAwMFonLFxuICAgICAgICB0aW1lNTogMTYzMDQ2MTU0MjAwMCwgLy8gJzIwMjEtMDktMDFUMDE6NTk6MDIuMDAwWicsXG4gICAgICAgIHRpbWUzOiAxNjMwNDY1MTQwMDAwLCAvLyAnMjAyMS0wOS0wMVQwMjo1OTowMC4wMDBaJyxcbiAgICAgICAgdGltZTY6IDE2MzA0NjUxNDAwMDAsIC8vICcyMDIxLTA5LTAxVDAyOjU5OjAwLjAwMFonLFxuICAgICAgICB0aW1lNzogMTYzMDQ2MTU0MjAwMCwgLy8gJzIwMjEtMDktMDFUMDI6NTk6MDAuMDAwWicsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0gSnNvblV0aWxzLmNvbnN0cnVjdFBheWxvYWQobWVzc2FnZSBhcyBhbnksIG1hcHBpbmdKc29uKTtcbiAgICAgIGV4cGVjdChwYXlsb2FkKS50b0VxdWFsKGV4cGVjdGVkUGF5bG9hZCk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHRoZSB0aW1lc3RhbXAgaXMgbW9yZSB0aGFuIGFsbG93ZWQgaW50byB0aGUgcGFzdCcsICgpID0+IHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IHRoaXMgaXMgYSBtb2NrXG4gICAgICBEYXRlLm5vdyA9IGplc3QuZm4oKCkgPT4gbmV3IERhdGUoJzIwMjEtMDktMDFUMDI6MDA6MDEuMDAwWicpKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHRpbWVTdGFtcDI6IDE2MzA0NjE1NDUwMDAsIC8vICcyMDIxLTA5LTAxVDAxOjU5OjA1LjAwMFonLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbWFwcGluZ0pzb24gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3RpbWVTdGFtcDInXSxcbiAgICAgICAgICBkZXN0S2V5OiAndGltZTEnLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB2YWxpZGF0ZVRpbWVzdGFtcDoge1xuICAgICAgICAgICAgICBhbGxvd2VkUGFzdFRpbWVEaWZmZXJlbmNlOiAxLFxuICAgICAgICAgICAgICBhbGxvd2VkUGFzdFRpbWVVbml0OiAnc2Vjb25kcycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBKc29uVXRpbHMuY29uc3RydWN0UGF5bG9hZChtZXNzYWdlIGFzIGFueSwgbWFwcGluZ0pzb24pO1xuICAgICAgfSkudG9UaHJvdygnQWxsb3dlZCB0aW1lc3RhbXAgaXMgWzEgc2Vjb25kc10gaW50byB0aGUgcGFzdCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHRoZSB0aW1lc3RhbXAgaXMgbW9yZSB0aGFuIGFsbG93ZWQgaW50byB0aGUgZnV0dXJlJywgKCkgPT4ge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogdGhpcyBpcyBhIG1vY2tcbiAgICAgIERhdGUubm93ID0gamVzdC5mbigoKSA9PiBuZXcgRGF0ZSgnMjAyMS0wOS0wMVQwMTo1MDowMS4wMDBaJykpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgdGltZVN0YW1wMjogMTYzMDQ2MTU0NTAwMCwgLy8gJzIwMjEtMDktMDFUMDE6NTk6MDUuMDAwWicsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtYXBwaW5nSnNvbiA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsndGltZVN0YW1wMiddLFxuICAgICAgICAgIGRlc3RLZXk6ICd0aW1lMScsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHZhbGlkYXRlVGltZXN0YW1wOiB7XG4gICAgICAgICAgICAgIGFsbG93ZWRGdXR1cmVUaW1lRGlmZmVyZW5jZTogMixcbiAgICAgICAgICAgICAgYWxsb3dlZEZ1dHVyZVRpbWVVbml0OiAnbWludXRlcycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBKc29uVXRpbHMuY29uc3RydWN0UGF5bG9hZChtZXNzYWdlIGFzIGFueSwgbWFwcGluZ0pzb24pO1xuICAgICAgfSkudG9UaHJvdygnQWxsb3dlZCB0aW1lc3RhbXAgaXMgWzIgbWludXRlc10gaW50byB0aGUgZnV0dXJlJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHRoZSB0aW1lc3RhbXAgaXMgc3RyaW5nIGFuZCBub3QgYSBudW1iZXInLCAoKSA9PiB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiB0aGlzIGlzIGEgbW9ja1xuICAgICAgRGF0ZS5ub3cgPSBqZXN0LmZuKCgpID0+IG5ldyBEYXRlKCcyMDIxLTA5LTAxVDAxOjUwOjAxLjAwMFonKSk7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICB0aW1lU3RhbXAyOiAnMjAyMS0wOS0wMVQwMTo1MDowMS4wMDBaJywgLy8gJzIwMjEtMDktMDFUMDE6NTk6MDUuMDAwWicsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtYXBwaW5nSnNvbiA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsndGltZVN0YW1wMiddLFxuICAgICAgICAgIGRlc3RLZXk6ICd0aW1lMScsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHZhbGlkYXRlVGltZXN0YW1wOiB7XG4gICAgICAgICAgICAgIGFsbG93ZWRGdXR1cmVUaW1lRGlmZmVyZW5jZTogMixcbiAgICAgICAgICAgICAgYWxsb3dlZEZ1dHVyZVRpbWVVbml0OiAnbWludXRlcycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBKc29uVXRpbHMuY29uc3RydWN0UGF5bG9hZChtZXNzYWdlIGFzIGFueSwgbWFwcGluZ0pzb24pO1xuICAgICAgfSkudG9UaHJvdygnVGltZXN0YW1wIGlzIG5vdCBhIG51bWJlciwgY2Fubm90IHZhbGlkYXRlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBlcmZvcm0gdHJpbSwgc2Vjb25kVGltZXN0YW1wICYgbWljcm8sIGRvYkluTU1ERCwgdG9JbnQsIHRvTG93ZXIsIHRvRmxvYXQsIElzQm9vbGVhbiwgZG9tYWluVXJsVjIsIGRvbWFpblVybCwgZ2V0T2Zmc2V0SW5TZWMsIGpzb25TdHJpbmdpZnlPbk9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHRyaW1tOiAnIFNwYWNlZCBzdHJpbmcgJyxcbiAgICAgICAgYm9vbDogdHJ1ZSxcbiAgICAgICAgdXJsOiAnaHR0cHM6Ly93d3cuZ2dvb2xlLmNvbScsXG4gICAgICAgIHR6OiAnQW1lcmljYS9OZXdfWW9yaycsXG4gICAgICAgIGV0ejogJ0FtMCcsXG4gICAgICAgIG9iajogeyBhOiAxLCBiOiAnYmFsbCcgfSxcbiAgICAgICAgZmw6ICcxMi44ODE4JyxcbiAgICAgICAgZG9iOiAnMjAxMi0wMS0wMScsXG4gICAgICAgIHRpbWU6ICcyMDIxLTA5LTAxVDAxOjU5OjA1LjAwMFonLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbWFwcGluZ0pzb24gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3RyaW1tJ10sXG4gICAgICAgICAgZGVzdEtleTogJ3RyaW1tZWQnLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBbJ3RyaW0nLCAndG9Mb3dlciddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3RyaW1tJ10sXG4gICAgICAgICAgZGVzdEtleTogJ2lzYm9vbCcsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFsnSXNCb29sZWFuJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsnYm9vbCddLFxuICAgICAgICAgIGRlc3RLZXk6ICdpc2Jvb2wyJyxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdHlwZTogWydJc0Jvb2xlYW4nXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWyd1cmwnXSxcbiAgICAgICAgICBkZXN0S2V5OiAnVXJsVjInLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBbJ2RvbWFpblVybFYyJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsndXJsJ10sXG4gICAgICAgICAgZGVzdEtleTogJ1VybCcsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFsnZG9tYWluVXJsJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsndHonXSxcbiAgICAgICAgICBkZXN0S2V5OiAnb2Zmc2V0JyxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdHlwZTogWydnZXRPZmZzZXRJblNlYyddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ29iaiddLFxuICAgICAgICAgIGRlc3RLZXk6ICdvYmplY3QnLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBbJ2pzb25TdHJpbmdpZnlPbk9iamVjdCddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ2V0eiddLFxuICAgICAgICAgIGRlc3RLZXk6ICdlb2Zmc2V0JyxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdHlwZTogWydnZXRPZmZzZXRJblNlYyddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ2ZsJ10sXG4gICAgICAgICAgZGVzdEtleTogJ2ZsVicsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFsndG9GbG9hdCddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ2ZsJ10sXG4gICAgICAgICAgZGVzdEtleTogJ2ludFYnLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBbJ3RvSW50J10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsnZG9iJ10sXG4gICAgICAgICAgZGVzdEtleTogJ21tZGQnLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBbJ2RvYkluTU1ERCddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3RpbWUnXSxcbiAgICAgICAgICBkZXN0S2V5OiAndHMnLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBbJ3NlY29uZFRpbWVzdGFtcCddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3RpbWUnXSxcbiAgICAgICAgICBkZXN0S2V5OiAnbXRzJyxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdHlwZTogWydtaWNyb1NlY29uZFRpbWVzdGFtcCddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBleHBlY3QoSnNvblV0aWxzLmNvbnN0cnVjdFBheWxvYWQobWVzc2FnZSBhcyBhbnksIG1hcHBpbmdKc29uKSkudG9FcXVhbCh7XG4gICAgICAgIHRyaW1tZWQ6ICdzcGFjZWQgc3RyaW5nJyxcbiAgICAgICAgaXNib29sOiBmYWxzZSxcbiAgICAgICAgaXNib29sMjogdHJ1ZSxcbiAgICAgICAgVXJsOiAnd3d3Lmdnb29sZS5jb20nLFxuICAgICAgICBVcmxWMjogJ2dnb29sZS5jb20nLFxuICAgICAgICBvZmZzZXQ6IC0xNDQwMCxcbiAgICAgICAgZW9mZnNldDogdW5kZWZpbmVkLFxuICAgICAgICBvYmplY3Q6ICd7XCJhXCI6MSxcImJcIjpcImJhbGxcIn0nLFxuICAgICAgICBmbFY6IDEyLjg4MTgsXG4gICAgICAgIGludFY6IDEyLFxuICAgICAgICBtbWRkOiAnMDEvMDEnLFxuICAgICAgICB0czogMTYzMDQ2MTU0NSxcbiAgICAgICAgbXRzOiAxNjMwNDYxNTQ1MDAwMDAwLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBlcmZvcm0gZmxhdEpzb24sIGpzb25TdHJpbmdpZnksIGpzb25TdHJpbmdpZnlPbkZsYXR0ZW4sIGVuY29kZVVSSUNvbXBvbmVudCBzdWNjZXNzZnVsbHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBvYmo6IHsgYTogMSwgYjogeyB3MTogJ2JhbGwnLCB3MjogJ2JhdCcgfSB9LFxuICAgICAgICBwYXJhbTogJz94PXRlc3Q/JyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1hcHBpbmdKc29uID0gW1xuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydvYmonXSxcbiAgICAgICAgICBkZXN0S2V5OiAnb2JqZWN0JyxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdHlwZTogWydmbGF0SnNvbiddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ29iaiddLFxuICAgICAgICAgIGRlc3RLZXk6ICdzb2JqJyxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdHlwZTogWydqc29uU3RyaW5naWZ5J10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsnb2JqJ10sXG4gICAgICAgICAgZGVzdEtleTogJ3NvYmpmJyxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdHlwZTogWydqc29uU3RyaW5naWZ5T25GbGF0dGVuJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsncGFyYW0nXSxcbiAgICAgICAgICBkZXN0S2V5OiAncScsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFsnZW5jb2RlVVJJQ29tcG9uZW50J10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGV4cGVjdChKc29uVXRpbHMuY29uc3RydWN0UGF5bG9hZChtZXNzYWdlIGFzIGFueSwgbWFwcGluZ0pzb24pKS50b0VxdWFsKHtcbiAgICAgICAgb2JqZWN0OiB7IGE6IDEsICdiLncxJzogJ2JhbGwnLCAnYi53Mic6ICdiYXQnIH0sXG4gICAgICAgIHNvYmpmOiAne1wiYVwiOjEsXCJiLncxXCI6XCJiYWxsXCIsXCJiLncyXCI6XCJiYXRcIn0nLFxuICAgICAgICBxOiAnJTNGeCUzRHRlc3QlM0YnLFxuICAgICAgICBzb2JqOiAne1wiYVwiOjEsXCJiXCI6e1widzFcIjpcImJhbGxcIixcIncyXCI6XCJiYXRcIn19JyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwZXJmb3JtIG51bWJlckZvclJldmVudWUgc3VjY2Vzc2Z1bGx5JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgcmV2OiAnJDEyNCcsXG4gICAgICB9O1xuICAgICAgY29uc3QgbWFwcGluZ0pzb24gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3JldiddLFxuICAgICAgICAgIGRlc3RLZXk6ICdyZXZlbnVlJyxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdHlwZTogWydudW1iZXJGb3JSZXZlbnVlJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBleHBlY3QoSnNvblV0aWxzLmNvbnN0cnVjdFBheWxvYWQobWVzc2FnZSBhcyBhbnksIG1hcHBpbmdKc29uKSkudG9FcXVhbCh7XG4gICAgICAgIHJldmVudWU6IDEyNC4wLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHJldmVudWUgaXMgbm90IHNlbnQgYXMgYSBudW1iZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICByZXY6ICckMTJhJyxcbiAgICAgIH07XG4gICAgICBjb25zdCBtYXBwaW5nSnNvbiA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsncmV2J10sXG4gICAgICAgICAgZGVzdEtleTogJ3JldmVudWUnLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBbJ251bWJlckZvclJldmVudWUnXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIEpzb25VdGlscy5jb25zdHJ1Y3RQYXlsb2FkKG1lc3NhZ2UgYXMgYW55LCBtYXBwaW5nSnNvbik7XG4gICAgICB9KS50b1Rocm93KCdSZXZlbnVlIGlzIG5vdCBpbiB0aGUgY29ycmVjdCBmb3JtYXQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiB1cmwgaXMgbm90IGNvcnJlY3Qgd2hpbGUgdXNpbmcgZG9tYWluVXJsVjIgZm9ybWF0dGluZyB0eXBlJywgKCkgPT4ge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogdGhpcyBpcyBhIG1vY2tcbiAgICAgIERhdGUubm93ID0gamVzdC5mbigoKSA9PiBuZXcgRGF0ZSgnMjAyMS0wOS0wMVQwMTo1MDowMS4wMDBaJykpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgdXJsOiAnZ29taW0nLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbWFwcGluZ0pzb24gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3VybCddLFxuICAgICAgICAgIGRlc3RLZXk6ICdVcmxWMicsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFsnZG9tYWluVXJsVjInXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgSnNvblV0aWxzLmNvbnN0cnVjdFBheWxvYWQobWVzc2FnZSBhcyBhbnksIG1hcHBpbmdKc29uKTtcbiAgICAgIH0pLnRvVGhyb3coJ0ludmFsaWQgVVJMOiBnb21pbScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY29uc3RydWN0IHBheWxvYWQgZWRnZSBjYXNlcycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIG1hcCBkZXN0S2V5IHdpdGggdW5kZWZpbmVkIHdoZW4gbXVsdGlLZXlNYXAgaXMgYW4gb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgZXZlbnQ6ICdwdXJjaGFzZScsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBpdGVtOiAnTW9iaWxlJyxcbiAgICAgICAgfSxcbiAgICAgICAgdGltZVN0YW1wOiAnMjAyMS0wOS0wMVQwMDowMDowMC4wMDBaJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1hcHBpbmdKc29uID0gW1xuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogWydwcm9wZXJ0aWVzLml0ZW0nXSxcbiAgICAgICAgICBkZXN0S2V5OiAnaXRlbU5hbWUnLFxuICAgICAgICAgIG1ldGFkYXRhOiB7IG11bHRpa2V5TWFwOiB7fSB9LFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgZXhwZWN0ZWRQYXlsb2FkID0ge1xuICAgICAgICBpdGVtTmFtZTogdW5kZWZpbmVkLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IEpzb25VdGlscy5jb25zdHJ1Y3RQYXlsb2FkKG1lc3NhZ2UgYXMgYW55LCBtYXBwaW5nSnNvbik7XG4gICAgICBleHBlY3QocGF5bG9hZCkudG9FcXVhbChleHBlY3RlZFBheWxvYWQpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBtdWx0aUtleU1hcCBidXQgc3RyaWN0TXVsdGlNYXAgaXMgcHJlc2VudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgaXRlbTogJ01vYmlsZScsXG4gICAgICAgIH0sXG4gICAgICAgIHRpbWVTdGFtcDogJzIwMjEtMDktMDFUMDA6MDA6MDAuMDAwWicsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtYXBwaW5nSnNvbiA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsncHJvcGVydGllcy5pdGVtJ10sXG4gICAgICAgICAgZGVzdEtleTogJ2l0ZW1OYW1lJyxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgc3RyaWN0TXVsdGlNYXA6IHt9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBKc29uVXRpbHMuY29uc3RydWN0UGF5bG9hZChtZXNzYWdlIGFzIGFueSwgbWFwcGluZ0pzb24pO1xuICAgICAgfSkudG9UaHJvdygnSW52YWxpZCBlbnRyeSBmb3Iga2V5IGl0ZW1OYW1lJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIG11bHRpS2V5TWFwLnNvdXJjZVZhbCBkb2VzIG5vdCBjb250YWluIHRoZSBzb3VyY2VLZXkgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBldmVudDogJ3B1cmNoYXNlJyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGl0ZW06ICdNb2JpbGUnLFxuICAgICAgICB9LFxuICAgICAgICB0aW1lU3RhbXA6ICcyMDIxLTA5LTAxVDAwOjAwOjAwLjAwMFonLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbWFwcGluZ0pzb24gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiBbJ3Byb3BlcnRpZXMuaXRlbSddLFxuICAgICAgICAgIGRlc3RLZXk6ICdpdGVtTmFtZScsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIG11bHRpa2V5TWFwOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzb3VyY2VWYWw6IFsnZicsICdGJywgJ0ZlbWFsZScsICdmZW1hbGUnXSxcbiAgICAgICAgICAgICAgICBkZXN0VmFsOiAnRicsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBleHBlY3QoSnNvblV0aWxzLmNvbnN0cnVjdFBheWxvYWQobWVzc2FnZSBhcyBhbnksIG1hcHBpbmdKc29uKSkudG9FcXVhbCh7XG4gICAgICAgIGl0ZW1OYW1lOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gbXVsdGlLZXlNYXAuc291cmNlVmFsIGlzIG5vdCBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgaXRlbTogJ01vYmlsZScsXG4gICAgICAgIH0sXG4gICAgICAgIHRpbWVTdGFtcDogJzIwMjEtMDktMDFUMDA6MDA6MDAuMDAwWicsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtYXBwaW5nSnNvbiA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsncHJvcGVydGllcy5pdGVtJ10sXG4gICAgICAgICAgZGVzdEtleTogJ2l0ZW1OYW1lJyxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgbXVsdGlrZXlNYXA6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNvdXJjZVZhbDoge30sXG4gICAgICAgICAgICAgICAgZGVzdFZhbDogJ0YnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgZXhwZWN0KEpzb25VdGlscy5jb25zdHJ1Y3RQYXlsb2FkKG1lc3NhZ2UgYXMgYW55LCBtYXBwaW5nSnNvbikpLnRvRXF1YWwoe1xuICAgICAgICBpdGVtTmFtZTogJ01vYmlsZScsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiBnaXZlbiBhbiBlbXB0eSBtYXBwaW5nSnNvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgcmV2ZW51ZTogMTAwLFxuICAgICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBtYXBwaW5nSnNvbiA9IFtdO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IEpzb25VdGlscy5jb25zdHJ1Y3RQYXlsb2FkKG1lc3NhZ2UgYXMgYW55LCBtYXBwaW5nSnNvbik7XG4gICAgICBleHBlY3QocGF5bG9hZCkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiBnaXZlbiBhbiBpbnZhbGlkIHNvdXJjZUtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgcmV2ZW51ZTogMTAwLFxuICAgICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBzb3VyY2VLZXkgPSAnaW52YWxpZEtleSc7XG4gICAgICBjb25zdCB2YWx1ZSA9IEpzb25VdGlscy5nZXRGaWVsZFZhbHVlRnJvbU1lc3NhZ2UobWVzc2FnZSBhcyBhbnksIHNvdXJjZUtleSk7XG4gICAgICBleHBlY3QodmFsdWUpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSB3aGVuIG1ldGFkYXRhIGlzIGludmFsaWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBldmVudDogJ3B1cmNoYXNlJyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHJldmVudWU6IDEwMCxcbiAgICAgICAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgICAgICAgcHJvZHVjdHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ1Byb2R1Y3QgMScsXG4gICAgICAgICAgICAgIHByaWNlOiA1MCxcbiAgICAgICAgICAgICAgcXVhbnRpdHk6IDIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnUHJvZHVjdCAyJyxcbiAgICAgICAgICAgICAgcHJpY2U6IDMwLFxuICAgICAgICAgICAgICBxdWFudGl0eTogMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBtYXBwaW5nSnNvbiA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6ICdwcm9wZXJ0aWVzLnJldmVudWUnLFxuICAgICAgICAgIGRlc3RLZXk6ICdyZXZlbnVlJyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdHlwZTogJ2ludmFsaWRUeXBlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gSnNvblV0aWxzLmNvbnN0cnVjdFBheWxvYWQobWVzc2FnZSBhcyBhbnksIG1hcHBpbmdKc29uKTtcbiAgICAgIGV4cGVjdCh2YWx1ZSkudG9FcXVhbCh7XG4gICAgICAgIHJldmVudWU6IDEwMCxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBJbnN0cnVtZW50YXRpb25FcnJvciB3aGVuIGEgcmVxdWlyZWQgdmFsdWUgaXMgbWlzc2luZycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgcmV2ZW51ZTogMTAwLFxuICAgICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgICBwcm9kdWN0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnUHJvZHVjdCAxJyxcbiAgICAgICAgICAgICAgcHJpY2U6IDUwLFxuICAgICAgICAgICAgICBxdWFudGl0eTogMixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdQcm9kdWN0IDInLFxuICAgICAgICAgICAgICBwcmljZTogMzAsXG4gICAgICAgICAgICAgIHF1YW50aXR5OiAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1hcHBpbmdKc29uID0gW1xuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogJ2V2ZW50JyxcbiAgICAgICAgICBkZXN0S2V5OiAnZXZlbnQnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6ICdwcm9wZXJ0aWVzLnJldmVudWUnLFxuICAgICAgICAgIGRlc3RLZXk6ICdyZXZlbnVlJyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiAncHJvcGVydGllcy5jdXJyZW5jeScsXG4gICAgICAgICAgZGVzdEtleTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiAncHJvcGVydGllcy5wcm9kdWN0cycsXG4gICAgICAgICAgZGVzdEtleTogJ3Byb2R1Y3RzJyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiAncHJvcGVydGllcy5pbnZhbGlkS2V5JyxcbiAgICAgICAgICBkZXN0S2V5OiAnaW52YWxpZEtleScsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIEpzb25VdGlscy5jb25zdHJ1Y3RQYXlsb2FkKG1lc3NhZ2UgYXMgYW55LCBtYXBwaW5nSnNvbik7XG4gICAgICB9KS50b1Rocm93KEluc3RydW1lbnRhdGlvbkVycm9yKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29uc3RydWN0IHRoZSBwYXlsb2FkIGNvcnJlY3RseSB3aXRoIGEgdmFsaWQgbWFwcGluZ0pzb24gYW5kIG1lc3NhZ2Ugb2JqZWN0IHdoZW4gZGVzdGluYXRpb24ga2V5IGlzIGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgcmV2ZW51ZTogMTAwLFxuICAgICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgICBwcm9kdWN0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnUHJvZHVjdCAxJyxcbiAgICAgICAgICAgICAgcHJpY2U6IDUwLFxuICAgICAgICAgICAgICBxdWFudGl0eTogMixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdQcm9kdWN0IDInLFxuICAgICAgICAgICAgICBwcmljZTogMzAsXG4gICAgICAgICAgICAgIHF1YW50aXR5OiAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1hcHBpbmdKc29uID0gW1xuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogJ2V2ZW50JyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiAncHJvcGVydGllcy5yZXZlbnVlJyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3VyY2VLZXlzOiAncHJvcGVydGllcy5jdXJyZW5jeScsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc291cmNlS2V5czogJ3Byb3BlcnRpZXMucHJvZHVjdHMnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICAvLyBOb3QgYSBjb3JyZWN0IHBheWxvYWQgYXMgdGhlIGRlc3RpbmF0aW9uIGtleXMgYXJlIGVtcHR5IHN0cmluZ3Mgb3Igbm90IHByZXNlbnRcbiAgICAgIGNvbnN0IGV4cGVjdGVkUGF5bG9hZCA9IHtcbiAgICAgICAgJyc6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnUHJvZHVjdCAxJyxcbiAgICAgICAgICAgIHByaWNlOiA1MCxcbiAgICAgICAgICAgIHF1YW50aXR5OiAyLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ1Byb2R1Y3QgMicsXG4gICAgICAgICAgICBwcmljZTogMzAsXG4gICAgICAgICAgICBxdWFudGl0eTogMSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKc29uVXRpbHMuY29uc3RydWN0UGF5bG9hZChtZXNzYWdlIGFzIGFueSwgbWFwcGluZ0pzb24pO1xuICAgICAgZXhwZWN0KHBheWxvYWQpLnRvRXF1YWwoZXhwZWN0ZWRQYXlsb2FkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2pzb24gdXRpbCBvdGhlciBmdW5jdGlvbnMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXRyaWV2ZSB0aGUgZmllbGQgdmFsdWUgY29ycmVjdGx5IGZyb20gdGhlIG1lc3NhZ2UgdXNpbmcgYSB2YWxpZCBzb3VyY2VLZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBldmVudDogJ3B1cmNoYXNlJyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHJldmVudWU6IDEwMCxcbiAgICAgICAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgICAgIH0sXG4gICAgICAgIHRyYWl0czoge1xuICAgICAgICAgIGZpcnN0TmFtZTogJ0pvaG4nLFxuICAgICAgICAgIGxhc3ROYW1lOiAnRG9lJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNvdXJjZUtleSA9ICdmaXJzdE5hbWUnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZSA9ICdKb2huJztcblxuICAgICAgY29uc3QgdmFsdWUgPSBKc29uVXRpbHMuZ2V0RmllbGRWYWx1ZUZyb21NZXNzYWdlKG1lc3NhZ2UgYXMgYW55LCBzb3VyY2VLZXkpO1xuICAgICAgZXhwZWN0KHZhbHVlKS50b0VxdWFsKGV4cGVjdGVkVmFsdWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHNvdXJjZUtleXMgaXMgbm90IHN0cmluZywgb2JqZWN0IG9yIEFycmF5JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogZm9yIHRlc3RpbmcgcHVycG9zZXNcbiAgICAgICAgSnNvblV0aWxzLmdldFZhbHVlRnJvbU1lc3NhZ2Uoe30gYXMgYW55LCAxMjMpO1xuICAgICAgfSkudG9UaHJvdygnV3Jvbmcgc291cmNlS2V5IHR5cGUgb3IgYmxhbmsgc291cmNlS2V5IGFycmF5Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBlcmZvcm0gYWRkaXRpb24gb3BlcmF0aW9uIHdoaWxlIGdldHRpbmcgdmFsdWUgZnJvbSBtZXNzYWdlJywgKCkgPT4ge1xuICAgICAgY29uc3QgbXNnID0ge1xuICAgICAgICBhOiAxMixcbiAgICAgICAgYzogMTE0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IG9wcyA9IHtcbiAgICAgICAgb3BlcmF0aW9uOiAnYWRkaXRpb24nLFxuICAgICAgICBhcmdzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlS2V5czogWydhJywgJ2InXSxcbiAgICAgICAgICAgIGRlZmF1bHRWYWw6IDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2VLZXlzOiBbJ2MuZCddLFxuICAgICAgICAgICAgZGVmYXVsdFZhbDogLTEsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBleHBlY3QoSnNvblV0aWxzLmdldFZhbHVlRnJvbU1lc3NhZ2UobXNnIGFzIGFueSwgb3BzKSkudG9FcXVhbCgxMSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBkZWZhdWx0VmFsIGZvciBhZGRpdGlvbiBvcGVyYXRpb24gd2hpbGUgZ2V0dGluZyB2YWx1ZSBmcm9tIG1lc3NhZ2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSB7XG4gICAgICAgIDE6IDEyMzQsXG4gICAgICAgIGE6IDEyLFxuICAgICAgICBjOiAxMTQsXG4gICAgICB9O1xuICAgICAgY29uc3Qgb3BzID0ge1xuICAgICAgICBvcGVyYXRpb246ICdhZGRpdGlvbicsXG4gICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2VLZXlzOiAxLFxuICAgICAgICAgICAgZGVmYXVsdFZhbDogMCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZUtleXM6IFsnYy5kJ10sXG4gICAgICAgICAgICBkZWZhdWx0VmFsOiAtMSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGV4cGVjdChKc29uVXRpbHMuZ2V0VmFsdWVGcm9tTWVzc2FnZShtc2cgYXMgYW55LCBvcHMpKS50b0VxdWFsKC0xKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiBubyBkZWZhdWx0VmFsdWVzIGFyZSBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IHtcbiAgICAgICAgYTogMTIsXG4gICAgICAgIGM6IDExNCxcbiAgICAgIH07XG4gICAgICBjb25zdCBvcHMgPSB7XG4gICAgICAgIG9wZXJhdGlvbjogJ2FkZGl0aW9uJyxcbiAgICAgICAgYXJnczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZUtleXM6IFsnRCcsICdXJ10sXG4gICAgICAgICAgICBkZWZhdWx0VmFsOiAwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlS2V5czogWydjLmQnXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGV4cGVjdChKc29uVXRpbHMuZ2V0VmFsdWVGcm9tTWVzc2FnZShtc2cgYXMgYW55LCBvcHMpKS50b0VxdWFsKG51bGwpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHN0cmluZyBkZWZhdWx0VmFsdWVzIGFyZSBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IHtcbiAgICAgICAgYTogMTIsXG4gICAgICAgIGM6IDExNCxcbiAgICAgIH07XG4gICAgICBjb25zdCBvcHMgPSB7XG4gICAgICAgIG9wZXJhdGlvbjogJ211bHRpcGxpY2F0aW9uJyxcbiAgICAgICAgYXJnczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZUtleXM6IFsnRCcsICdXJ10sXG4gICAgICAgICAgICBkZWZhdWx0VmFsOiAnMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2VLZXlzOiBbJ2MuZCddLFxuICAgICAgICAgICAgZGVmYXVsdFZhbDogJzEyJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGV4cGVjdChKc29uVXRpbHMuZ2V0VmFsdWVGcm9tTWVzc2FnZShtc2cgYXMgYW55LCBvcHMpKS50b0VxdWFsKG51bGwpO1xuICAgICAgb3BzLm9wZXJhdGlvbiA9ICdhZGRpdGlvbic7XG4gICAgICBleHBlY3QoSnNvblV0aWxzLmdldFZhbHVlRnJvbU1lc3NhZ2UobXNnIGFzIGFueSwgb3BzKSkudG9FcXVhbChudWxsKTtcblxuICAgICAgb3BzLm9wZXJhdGlvbiA9ICdyYW5kb21PcCc7XG4gICAgICBleHBlY3QoSnNvblV0aWxzLmdldFZhbHVlRnJvbU1lc3NhZ2UobXNnIGFzIGFueSwgb3BzKSkudG9FcXVhbChudWxsKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3RyaW5naWZ5IGpzb24nLCAoKSA9PiB7XG4gICAgICBleHBlY3QoSnNvblV0aWxzLnN0cmluZ2lmeSh7IGE6IDEgfSkpLnRvRXF1YWwoYHtcImFcIjoxfWApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIGdpdmVuIGFuIGludmFsaWQgc291cmNlS2V5JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgZXZlbnQ6ICdwdXJjaGFzZScsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICByZXZlbnVlOiAxMDAsXG4gICAgICAgICAgY3VycmVuY3k6ICdVU0QnLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgc291cmNlS2V5ID0gJ2ludmFsaWRLZXknO1xuXG4gICAgICBjb25zdCB2YWx1ZSA9IEpzb25VdGlscy5nZXRGaWVsZFZhbHVlRnJvbU1lc3NhZ2UobWVzc2FnZSBhcyBhbnksIHNvdXJjZUtleSk7XG4gICAgICBleHBlY3QodmFsdWUpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gcHJvcGVyIHRlbXBsYXRlZCB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIGV2ZW50OiAncHVyY2hhc2UnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgcmV2ZW51ZTogMTAwLFxuICAgICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBtYXBwaW5nSnNvbiA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHNvdXJjZUtleXM6IFsncHJvcGVydGllcyddLFxuICAgICAgICAgIGRlc3RLZXk6ICdpdGVtTmFtZScsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHRlbXBsYXRlOiAne3t2YWx1ZS5yZXZlbnVlfX0ge3t2YWx1ZS5jdXJyZW5jeX19JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGV4cGVjdChKc29uVXRpbHMuY29uc3RydWN0UGF5bG9hZChtZXNzYWdlIGFzIGFueSwgbWFwcGluZ0pzb24pKS50b0VxdWFsKHtcbiAgICAgICAgaXRlbU5hbWU6ICcxMDAgVVNEJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19